Подскажите как сделать чтобы при клике по элементу Panel у нее появлялся контур?
еще пытался сделать чтобы при нажатии в текстовом поле отображалась определенная информация. Как понял, это через фокус делается
пробовал вот так, неработает...
AddHandler (Panel1.MouseMove), AddressOf Panel_MouseMove
Me.Controls.Add(Panel1)
End Sub
Private Sub panel1_LostFocus(ByVal sender As Object, ByVal e As System.EventArgs) Handles TextBox1.LostFocus
TextBox2.Text = "кккккккккккккккккккккккк"
End Sub
Private Sub panel1_GotFocus(ByVal sender As Object, ByVal e As System.EventArgs) Handles TextBox1.GotFocus
TextBox2.Text = "ыыыыыыыыыыыыыыыыыыыыыыыы"
End Sub
AddHandler (Panel1.MouseMove), AddressOf Panel_MouseMove
Me.Controls.Add(Panel1)
End Sub
Private Sub panel1_LostFocus(ByVal sender As Object, ByVal e As System.EventArgs) Handles Panel1.LostFocus
TextBox2.Text = "1234"
End Sub
Private Sub panel1_GotFocus(ByVal sender As Object, ByVal e As System.EventArgs) Handles Panel1.GotFocus
TextBox2.Text = "123"
End Sub
AddHandler (Panel1.MouseMove), AddressOf Panel_MouseMove
Me.Controls.Add(Panel1)
End Sub
Вы подписываетесь на эвент каждый раз, когда форма перерисовывается - то есть каждый раз когда ее перекрывает-проходит над ней итп - другая форма.
Зачем?
обработчик эвента MouseMove будет вызываться много раз, и с увеличением времени использования программы она будет работать все медленнее, и медленнее.
Подписку обработчиков надо делать один раз - в момент создания контрола.
Вот этот случай и можно обработать, приведя тип обьекта sender к типу panel и изменив у полученного свойство borderstyle (не помню точно).
Это не оправдание чтобы писать багокод.
Опасно продолжать так - в какой-то момент вы вообще перестанете понимать, что у вас происходит.
Я же давал вроде пример с перетаскиванием....
Надо:
- Четко выяснить, где создается панель. (и опять - почему панель? надо делать Юзерконтрол! Примитивным подходом вы уже не обойдетесь. Примитивно - вовсе не значит просто. Обязательно надо использовать организующие конструкции - в тот момент, когда примитивный подход приводит к копированию и писанию повторяющегося кода.
- в момент созадния экземпляра, его надо подготовить к будущей жизни - прицепить все необходимые обработчики, дать ему нужную визуализацию, итп...
- все, дальше он уже должен жить своей жизнью и реагировать на действия пользователя. Реагировать - а не додалбливаться инициализацией на грани интуиции.
:-)
и они все перерисовываются.
Кстати, как у вас с пониманием наследования? почему в эвенте можно через ссылку на обьект (sender) можно узнать и достать того, у кого этот эвент случился - вы это понимаете?
Виби плох тем, что он пытается (и весьма успешно) скрыть обьектную структуру дотнета, сделать все типа интуитивно понятно. Это здорово, когда действительно не нужно выходить за рамки принципа RAD - rapid application development , накидал кнопочек и текстбоксов - и программа готова.
Но у вас уже не тот случай.
Вы ведь не первый, кто оказался в такой же ситуации.
Вот как раз юзерконтрол и позволил бы вам - "по ходу наворачивать" - а так придется тупо все переписывать.
при клике в цикле пробегаем по всем панелям и отключаем у них рамку, у кликнутого включаем.
Создаём переменную, в которую будем записывать хендл объекта на который устанавливаем рамку.
Потом при клике удаляем рамку с объекта который сейчас в переменной, потом устанавливаем рамку на новый объект и сохраняем новый хендл в переменную.
Потом при клике удаляем рамку с объекта который сейчас в переменной, потом устанавливаем рамку на новый объект и сохраняем новый хендл в переменную
Поддерживаю,хороший вариант.Сам так некогда делал
Разумеется,следует проверять переменную на пустоту