Simonetos The Greek Ответов: 2

Как я могу определить, когда свойства parentform изменяются?


Я работаю над несколькими из них. элемент управления UserControl в последнее время и на этот раз это обычай заголовок окна- Что я хочу сделать, так это ... обнаружить когда Родительская форма свойства (например ControlBox например) меняется разработчиком в время разработки и затем обновление мой заголовок окна.

Что я уже пробовал:

Поэтому я добавил Таймер на мой элемент управления UserControl чтобы сделать эту "работу". Это работает, но я думаю, что это не самый подходящий подход...
Private Sub Timer_Tick(sender As Object, e As EventArgs) Handles Timer.Tick
	Me.ControlBox = Me.ParentForm.ControlBox
	If ParentForm.ControlBox = True Then ControlsBox_FlowLayoutPanel.Visible = True Else ControlsBox_FlowLayoutPanel.Visible = False
	If ParentForm.MinimizeBox = True Then MinimizeButton_PictureBox.Visible = True Else MinimizeButton_PictureBox.Visible = False
	Me.MinimizeBox = Me.ParentForm.MinimizeBox
	If ParentForm.MaximizeBox = True Then MaximizeButton_PictureBox.Visible = True Else MaximizeButton_PictureBox.Visible = False
	Me.MaximizeBox = Me.ParentForm.MaximizeBox
End Sub
Есть ли другой способ сделать это, а не с помощью таймера? Например, чтобы обнаружить ParentFormТекст собственность а потом обновление мой элемент управления UserControlТекст- Я делаю что-то вроде этого...
Private WithEvents _ParentForm As Form

Protected Overrides Sub OnParentChanged(e As EventArgs)
	MyBase.OnParentChanged(e)
	_ParentForm = Me.ParentForm
	Call ParentForm_TextChanged()
End Sub

Private Sub ParentForm_TextChanged() Handles _ParentForm.TextChanged
	If _ParentForm Is Nothing Then
		FormTitle_Label.Text = FormTitle_Label.Text
	Else
		FormTitle_Label.Text = _ParentForm.Text
	End If
	Invalidate()
End Sub
Есть ли что-нибудь подобное для таких свойств, как ControlBox, MinimizeBox и MaximizeBox?

2 Ответов

Рейтинг:
6

Simonetos The Greek

Ну, вот пример того, как мы можем обнаружить, когда свойства ParentForm изменяются, а затем сделать свое дело...

Private WithEvents _ParentForm As Form

Protected Overrides Sub OnParentChanged(e As EventArgs)
	MyBase.OnParentChanged(e)
	_ParentForm = Me.ParentForm
	Call ParentForm_TextChanged()
	Call ParentForm_StyleChanged()
End Sub

Private Sub ParentForm_TextChanged() Handles _ParentForm.TextChanged
	If _ParentForm IsNot Nothing Then FormTitle_Label.Text = _ParentForm.Text
	Invalidate()
End Sub

Private Sub ParentForm_StyleChanged() Handles _ParentForm.StyleChanged
	If _ParentForm IsNot Nothing Then
		If _ParentForm.ControlBox = True Then ControlsBox_FlowLayoutPanel.Visible = True Else ControlsBox_FlowLayoutPanel.Visible = False
		If _ParentForm.MinimizeBox = True Then MinimizeButton_PictureBox.Visible = True Else MinimizeButton_PictureBox.Visible = False
		If _ParentForm.MaximizeBox = True Then MaximizeButton_PictureBox.Visible = True Else MaximizeButton_PictureBox.Visible = False
	End If
End Sub


Рейтинг:
2

Ralf Meier

Я не совсем уверен, чего именно вы пытаетесь достичь. Тем не менее ... вместо использования таймера вы можете взять StyleChanged-событие родительской формы.
Каждое из запрошенных вами свойств (ControlBox, MinimizeBox, MaximizeBox и т.д.) изменяет стиль формы и вызывает это событие - так что вы можете вызвать содержимое вашего Timer_Tick-метода лучше в этом новом методе ...

Для обнаружения родительской формы я бы не стал использовать метод OnParentChanged ... Я бы использовал OnHandleCreated-метод ... но результат будет тот же самый ...


Simonetos The Greek

Большое вам спасибо за вашу помощь, мой друг!!!

Ralf Meier

Паракало - пожалуйста ...

Simonetos The Greek

О, "паракало" я вижу!!! :) У вас есть какие-нибудь связи с Грецией?

Ralf Meier

Нет... только с праздников ... :(

Simonetos The Greek

Вы-часть всего, что у вас есть в вашем сердце!!! Наступает лето, а Греция все еще здесь, мой друг... ;)