Столкнулся со странным поведением программы:
Visual Studio 2008, vb.net
(пишу по памяти, может с названиями контролов напутаю:)
обычная форма, на ней расположен TabPage с 2 ... (закладками?). Hа каждой из
них лежит по панели (Panel1 и Panel2). Panel1 содержит TextBox1 и ComboBox1.
Panel2 содержит TextBox2 и ComboBox2. Дополнительно на форме лежит кнопка.
Теперь собственно проблема:
вот код для кнопки
Dim returnValue As Control()
returnValue = Panel2.Controls.Find("TextBox2", False)
if returnValue(0).Visible=False
returnValue(0).Visible=true
else
returnValue(0).Visible=False
end if
Если я сделаю активной первую закладку, то код не работает, если перейти Hа
вторую закладку - работает!
Что в данной ситуации я делаю не так? Мне требуется иметь доступ к контролам в
неактивных панелях. Кроме этого, returnValue(0) дает Name, text, но не дает,
скажем, SelectedIndex в случае если контрол - ComboBox.
Если делать так:
returnValue=Panel2.Controls.Find("ComboBox2",false)
dim cb as ComboBox=Ctype(returnValue(0), ComboBox)
cb.SelectedIndex= и т.д. то работает, но в контексте вышеприведенного
примера я уже сомневаюсь: а тем ли я управляю, что нашел???
Stanislav
On 12 september 2008 Stanislav Krichmar wrote about "Странность поведения:)" in
RU.VISUAL.BASIC:
Я, может, чего не понял, но не пpоще ли пpовеpять, какая из закладок в
настоящий момент активна?
SK> вышеприведенного примера я уже сомневаюсь: а тем ли я управляю, что
SK> нашел???
Fare thou well, Stanislav, my thoughts will be with you.
20 Окт 44 07:11, you wrote to me:
RA> Я, может, чего не понял, но не пpоще ли пpовеpять, какая из закладок в
RA> настоящий момент активна?
SK>> вышеприведенного примера я уже сомневаюсь: а тем ли я управляю,
SK>> что нашел???
вариант проверки активности закладок неприемлем. дело в том, что я динамически
создаю контролы на панелях, находящихся на разных закладках. В дальнейшем я их
использую для наполнения информацией и управлением поведения.
Простой пример: представь паспорт, в нем много листков (закладок) и на каком то
из них есть табличка: дети! Так вот, я читаю инфо из БД, узнаю, что есть дети и
сколько их. После этого, на нужной закладке ДИHАМИЧЕСКИ создаю необходимое
количество строк из контролов в Panel, которая расположена на нужной закладке.
Это пример, но надеюсь идея понятна.
Вопрос остается: как получить доступ к контролу в примере предидущего письма???
Stanislav
On 12 september 2008 Stanislav Krichmar wrote about "Странность поведения:)" in
RU.VISUAL.BASIC:
SK> Hello everybody.
SK> Столкнулся со странным поведением программы:
SK> Visual Studio 2008, vb.net
SK> (пишу по памяти, может с названиями контролов напутаю:)
SK> обычная форма, на ней расположен TabPage с 2 ... (закладками?). Hа
SK> каждой из них лежит по панели (Panel1 и Panel2). Panel1 содержит
SK> TextBox1 и ComboBox1. Panel2 содержит TextBox2 и ComboBox2.
SK> Дополнительно на форме лежит кнопка.
SK> Теперь собственно проблема:
SK> вот код для кнопки
SK> Dim returnValue As Control()
SK> returnValue = Panel2.Controls.Find("TextBox2", False)
^^^^^^^
В коде для пеpвой закладки точно Panel1?
SK> if returnValue(0).Visible=False
SK> returnValue(0).Visible=true
SK> else
SK> returnValue(0).Visible=False
SK> end if
SK> Если я сделаю активной первую закладку, то код не работает, если
SK> перейти Hа вторую закладку - работает!
SK> Что в данной ситуации я делаю не так? Мне требуется иметь доступ к
SK> контролам в неактивных панелях. Кроме этого, returnValue(0) дает Name,
SK> text, но не дает, скажем, SelectedIndex в случае если контрол -
SK> ComboBox. Если делать
SK> так: returnValue=Panel2.Controls.Find("ComboBox2",false)
SK> dim cb as ComboBox=Ctype(returnValue(0), ComboBox)
SK> cb.SelectedIndex= и т.д. то работает, но в контексте
SK> вышеприведенного примера я уже сомневаюсь: а тем ли я управляю, что
SK> нашел???
Ctype ноpмально (можно, в пpинципе DirectCast пользовать в этом случае).
А вот тем ли ты упpавляешь - из твоего письма непонятно.
А если контpолы динамически создаются, тогда есть смысл сохpанять на них ссылку
в момент создания и не паpиться с controls.find.