0 / 0 / 0
Регистрация: 14.07.2010
Сообщений: 58
|
|
1 | |
Компонент вроде ListView и зона видимости.13.12.2010, 16:53. Показов 1447. Ответов 12
Метки нет (Все метки)
Всем привет!
Ребята, пожалуйста, подскажите как решить одну небольшую проблемку. Я написал компонент вроде ListView, но, если поле с записью находится за пределами самого компонента, то к нему(полю) нельзя обратиться. А теперь сам вопрос. Как сделать так, чтобы при изменении значения полосы прокрутки, компонент, который находится за пределами зоны видимости получал фокус и был в зоне видимости? Всем заранее огромное спасибо!
0
|
13.12.2010, 16:53 | |
Ответы с готовыми решениями:
12
Зона видимости Глобальная зона видимости Зона видимости переменных Вызов функций. Зона видимости |
Comanche
|
|
13.12.2010, 17:26 | 2 |
Ну ни фига себе ты спросил! Кто ж тебе ответит, не видя перед глазами кода? мало ли, как именно ты слепил этот свой компонент... да и фрагментом кода тут вряд ли обойдёшься - скорее всего, весь проект смотреть надо.
|
0 / 0 / 0
Регистрация: 14.07.2010
Сообщений: 58
|
|
13.12.2010, 18:33 [ТС] | 3 |
Я использовал обычный textbox в виде массива(text1(тут элемент массива))
В том-то и дело, что надо не код смотреть, а придумать способ перемещения при помощи скрола. У меня в голову просто ничего не лезет. Может че подскажешь?
0
|
Comanche
|
|
13.12.2010, 19:54 | 4 |
1. У скролла есть св-ва Min и Max. Сделай их соотв-но 0 и число элементов списка. При изменении VScroll1.Value путём прокрутки 'вниз' (к примеру) - считывай значение этого св-ва в N и меняй св-во Top элемента Text1(N) так, чтобы оно стало равно:
(а) высоте контейнера твоего компонента за вычетом высоты самого элемента Text1(N) или (б) высоте элемента Text1(N), умноженной на N. Вариант (б) - для случаев, если высота элемента Text1(N), умноженная на N, меньше высоты контейнера. Вариант (а) - для остальных случаев. При изменении VScroll1.Value путём прокрутки 'вверх' - в варианте 'а' ставь в ноль. При изменении числа элементов списка - не забывай менять VScroll1.Max! 2. Не советую делать компонент на базе бэйсиковских текстбоксов: когда их становится на форме много, то они жутко жрут память. Лучше создавай (через API CreateWindowEx) окна класса 'Edit'. |
Comanche
|
|
13.12.2010, 20:06 | 5 |
Да, и ещё одно: конечно же, надо 'двигать' не только N-ый элемент, но и все остальные. Но уж это сообразишь сам.
|
0 / 0 / 0
Регистрация: 14.07.2010
Сообщений: 58
|
||||||
15.12.2010, 16:36 [ТС] | 6 | |||||
Спасибо тебе, Comanche!
В принципе я так и сделал, но не успел вовремя скинуть код. Если кому потребуется, то ниже код, а там разбирайтесь сами.
Как говориться, красоте нет предела
0
|
0 / 0 / 0
Регистрация: 14.07.2010
Сообщений: 58
|
|
15.12.2010, 16:44 [ТС] | 7 |
А вот еще такой вопросик.
Как узнать какой элемент активен?
0
|
Comanche
|
|
15.12.2010, 19:58 | 8 |
У UserControl'а, как и у формы, есть такое св-во - ActiveControl.
|
Сумрак
|
|
15.12.2010, 22:09 | 9 |
хех.. только у твоего контрола один недостаток.
А если будет 100 строк будет 100 текстбоксов, а если 1000? :-) |
Messir
|
|
15.12.2010, 23:44 | 10 |
Такие контролы по-другому делать надо... Например, ручным рисованием, без всяких контролов...
|
Сумрак
|
|
16.12.2010, 06:40 | 11 |
Во-во. Все табличные контрлы рисованные...
|
0 / 0 / 0
Регистрация: 14.07.2010
Сообщений: 58
|
|
16.12.2010, 11:43 [ТС] | 12 |
Вопрос к Comanche.
Я так и прописовал. Только если задать в виде ActiveControl, то он возвращает значение содержимого, а если прописать ActiveControl.Name, то он возвращает имя активного элемента, но им, почему-то я не могу воспользоваться. Например, я хочу узнать какой элемент активен и перейти к следующему: ... id_cont=Mid(ActiveControl.Name,4) Text[id_cont+1].SetFocus Все время возвращает ошибку. Как прописать это правильно. Что касается текстбоксов, что я с вами согласен. Я написал контрол вроде лабела, только со своими примочками.
0
|
Comanche
|
|
16.12.2010, 12:43 | 13 |
Просто ActiveControl.SetFocus.
Только это может дать ошибку - не у всех контролов есть этот метод. Можно поставить перед этим On Error Resume Next, а после - Err.Clear (ну или On Error Goto 0). |
16.12.2010, 12:43 | |
16.12.2010, 12:43 | |
Помогаю со студенческими работами здесь
13
Зона видимости экземпляра класса после блока try Вложенные классы, зона видимости класса, заголовочный фаил Помогите найти компонент, что-то вроде SplitPane в Java. Как в ListView на создаваемые Item'ы наложить события, вроде MouseClick, MouseMove Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |