Помогите, плиз, разобраться с Событиями!... VB.NET

Язык Visual Basic на платформе .NET.

Модераторы: Ramzes, Sebas

SamsonsFive
Начинающий
Начинающий
 
Сообщения: 5
Зарегистрирован: 07.02.2007 (Ср) 18:45

Помогите, плиз, разобраться с Событиями!... VB.NET

Сообщение SamsonsFive » 07.02.2007 (Ср) 18:52

Такая проблема... Есть Форма на которой находится SplitContainer. На первой панели SplitContainer'а находится Button, на второй UserContorl. UserControl содержит три TextBox. Мне хотелось сделать, чтобы при Фокусе, TextBox меня стиль рамки на 3D, а при выходе на FixedSingle. Написал в котроле следующий код:

Imports System.Windows.Forms
Public Class UserControl1
Public Sub New()

InitializeComponent()

Dim ctl As Control = Nothing
For Each ctl In Me.Controls
If TypeOf ctl Is TextBox Then
AddHandler ctl.Enter, AddressOf TextBox_Enter
End If
Next
ctl = Nothing
End Sub

Private Sub TextBox_Enter(ByVal sender As Object, ByVal e As System.EventArgs)
Dim ctl As TextBox = Nothing
Me.SuspendLayout()
Try
ctl = sender
RemoveHandler ctl.Enter, AddressOf TextBox_Enter
RemoveHandler ctl.Leave, AddressOf TextBox_Leave
ctl.BorderStyle = Windows.Forms.BorderStyle.Fixed3D
ctl.BackColor = System.Drawing.SystemColors.Control
AddHandler ctl.Leave, AddressOf TextBox_Leave
Catch ex As Exception
MessageBox.Show(ex.Message)
End Try
ctl = Nothing
Me.ResumeLayout(False)
End Sub

Private Sub TextBox_Leave(ByVal sender As Object, ByVal e As System.EventArgs)
Dim ctl As TextBox = Nothing
Me.SuspendLayout()
Try
ctl = sender
RemoveHandler ctl.Enter, AddressOf TextBox_Enter
RemoveHandler ctl.Leave, AddressOf TextBox_Leave
ctl.Enabled = False 'иначе фокус не теряет при переходе по Tab'у
ctl.BorderStyle = Windows.Forms.BorderStyle.FixedSingle
ctl.BackColor = System.Drawing.SystemColors.Window
ctl.Enabled = True
AddHandler ctl.Enter, AddressOf TextBox_Enter
Catch ex As Exception
MessageBox.Show(ex.Message)
End Try
Me.ResumeLayout(False)
ctl = Nothing
End Sub
End Class

Так вот, проблема в следующем. Если щелкнуть по любому техбоксу, а потом по кнопке (Button), то все в порядке, TextBox теряет фокус, но если щелкнуть по техбоксу, а потом по Сплиттеру, то происходит переход Фокуса в следующий ТекстБокс....
Помогите разобраться... Читал МСДН, там написано про WM_KillFocus, но с API связываться неохота, так как не силен...
Исходный проект прилагается...

Viper
Артефакт VBStreets
Артефакт VBStreets
Аватара пользователя
 
Сообщения: 4394
Зарегистрирован: 12.04.2005 (Вт) 17:50
Откуда: Н.Новгород

Сообщение Viper » 08.02.2007 (Чт) 8:20

На редкость мутный код... Зачем удаление обработчиков событий производится?

З.Ы. ТЭГИ!!!!!
Весь мир матрица, а мы в нем потоки байтов!

SamsonsFive
Начинающий
Начинающий
 
Сообщения: 5
Зарегистрирован: 07.02.2007 (Ср) 18:45

Сообщение SamsonsFive » 08.02.2007 (Чт) 9:00

!Viper! писал(а):На редкость мутный код... Зачем удаление обработчиков событий производится?

З.Ы. ТЭГИ!!!!!



А затем, что при изменении стили рамки, контрол теряет Фокус, т.е. по ходу он уничтожается и создается вновь, соответственно происходит событие Leave, а затем Enter и пошло-поехало. попробуй сам... А Тэги мне для другого нужны...

Viper
Артефакт VBStreets
Артефакт VBStreets
Аватара пользователя
 
Сообщения: 4394
Зарегистрирован: 12.04.2005 (Вт) 17:50
Откуда: Н.Новгород

Сообщение Viper » 08.02.2007 (Чт) 10:48

Тэги нужны для того, чтоб тот пример кода, который ты привел можно было нормально читать!
Весь мир матрица, а мы в нем потоки байтов!

SamsonsFive
Начинающий
Начинающий
 
Сообщения: 5
Зарегистрирован: 07.02.2007 (Ср) 18:45

Сообщение SamsonsFive » 08.02.2007 (Чт) 11:08

!Viper! писал(а):Тэги нужны для того, чтоб тот пример кода, который ты привел можно было нормально читать!


Не серьезно... Ты когда-нибудь пробовал использовать ТЭГИ на КПК?!
Скопируй код и вставь в ЮзерКонтрол!... Почитал еще раз МСДН, там пишут, что это баг NetFramework 1.0, но... у меня VS2005, и она работает с NetFramework версии 2... Блин!.. Проблема с клавишей Tab, если сделать у TextBox TabStop в True, то баг пропадает, но коряво как-то получается....

SamsonsFive
Начинающий
Начинающий
 
Сообщения: 5
Зарегистрирован: 07.02.2007 (Ср) 18:45

Сообщение SamsonsFive » 08.02.2007 (Чт) 11:36

вернее False. Просто возми, создай форму и СплитКонтейнер, засунь в негоЮзерКонтрол с ТекстБоксами, которые при входе в них меняли бы стиль рамки на 3D. а при выходе на предыдущий стиль. И попробуй пощелкать по Сплиттеру. Посмотри что получается и предложи вариант


Вернуться в Visual Basic .NET

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 59

    TopList