Форум программистов, компьютерный форум, киберфорум
Visual Basic
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.57/7: Рейтинг темы: голосов - 7, средняя оценка - 4.57
0 / 0 / 0
Регистрация: 14.07.2010
Сообщений: 58
1

Компонент вроде ListView и зона видимости.

13.12.2010, 16:53. Показов 1447. Ответов 12
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Всем привет!
Ребята, пожалуйста, подскажите как решить одну небольшую проблемку.
Я написал компонент вроде ListView, но, если поле с записью находится за пределами самого компонента, то к нему(полю) нельзя обратиться.
А теперь сам вопрос.
Как сделать так, чтобы при изменении значения полосы прокрутки, компонент, который находится за пределами зоны видимости получал фокус и был в зоне видимости?
Всем заранее огромное спасибо!
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
13.12.2010, 16:53
Ответы с готовыми решениями:

Зона видимости
Всем привет! Столкнулся с проблемой нахождения так называемой зоны видимости. Имеется...

Глобальная зона видимости
Задача по выдаче количества наиболее часто встречающейся буквы. В приведенном мною решении все...

Зона видимости переменных
Здравствуйте! Подскажите, пожалуйста, как решить такую проблему: В книге Exel 2 пользовательские...

Вызов функций. Зона видимости
Есть несколько функций. К примеру: void menu() {...opt1(); opt2()} void opt1() {... menu();}...

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!
В принципе я так и сделал, но не успел вовремя скинуть код.
Если кому потребуется, то ниже код, а там разбирайтесь сами.
Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
    If Text1(vsbRight.Value).Top + Text1(vsbRight.Value).Height > UserControl.Height Then
        For i = 0 To Text1.UBound
            Text1(i).Top = Text1(i).Top - 300
            If Text1(i).Top + Text1(i).Height < 350 Then
                Text1(i).Visible = False
            End If
        Next
    ElseIf Text1(vsbRight.Value).Top < 330 Then
        itop = 330
        For i = vsbRight.Value To Text1.UBound
            Text1(i).Top = itop
            If Text1(i).Visible = False Then Text1(i).Visible = True
            itop = itop + 300
        Next
    End If
    Text1(vsbRight.Value).SetFocus
Это то, что мне первое пришло в голову.
Как говориться, красоте нет предела
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
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
16.12.2010, 12:43
Помогаю со студенческими работами здесь

Зона видимости экземпляра класса после блока try
Добрый день! При создании класса учел исключительную ситуацию в его конструкторе при помощи throw....

Вложенные классы, зона видимости класса, заголовочный фаил
Добрый день! Пока писал вопрос нашел ответ)) Но возник другой! Class A { public: ...

Помогите найти компонент, что-то вроде SplitPane в Java.
Очень нужен компонент, что-то вроде SplitPane в Java(панель, с помощью которой можно форму на 2...

Как в ListView на создаваемые Item'ы наложить события, вроде MouseClick, MouseMove
Добрый день. Как в ListView на создаваемые Item'ы наложить события, вроде MouseClick, MouseMove? И...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
13
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru