Закрытие VB.Net UserControl в Winforms - PullRequest
1 голос
/ 04 марта 2010

Я пытаюсь сохранить некоторые макеты из DevExpress Grid Controls, чтобы пользователи могли изменять макеты и загружать их при более позднем использовании элемента управления.

У меня вопрос к вопросу о скорости. Я загружаю элемент управления через пользовательский элемент управления внутри формы. Теперь моя проблема заключается в создании элемента управления путем добавления экземпляра элемента управления к элементу управления панели внутри элемента управления с вкладками, когда вкладка становится видимой, а затем очистки элемента управления, когда элемент скрыт.

    If ClaimsGridPanelControl.Visible = True Then
            ClaimsGridPanelControl.Controls.Add(New RXClaimsGridControl(ClaimsBindingSource))
    Else
            ClaimsGridPanelControl.Controls.Clear()
    End If

Так что внутри RxClaimGridControl мне нужно вызвать метод SaveLayout, когда я очищаю элемент управления. Но нет события, по крайней мере, которое я могу найти, которое срабатывает, когда пользовательский контроль удаляется / закрывается / скрывается.

Мои мысли по поводу обработки .Clear () заключаются в том, чтобы вызвать событие в родительском элементе управления, а затем обработать это событие внутри пользовательского элемента управления.

Есть ли какое-то событие, которое я пропускаю в отношении удаления / закрытия / скрытия пользовательского элемента управления, или есть лучший способ сделать это.

Ответы [ 3 ]

2 голосов
/ 04 марта 2010

Переопределить Dispose или OnHandleDestroyed методы UserControl.

1 голос
/ 10 февраля 2015

Я нашел это в http://lukhezo.com/2007/10/10/usercontrol-closing-event/

Protected Overloads Overrides Sub OnCreateControl()

    MyBase.OnCreateControl()

    AddHandler Me.ParentForm.FormClosing, AddressOf ParentForm_FormClosing

End Sub

Private Sub ParentForm_FormClosing(ByVal sender As Object, ByVal e As FormClosingEventArgs)

    If MessageBox.Show("Would you like to close the parent form?", "Close parent form?", _

                       MessageBoxButtons.YesNo, MessageBoxIcon.Question) = DialogResult.No Then

        e.Cancel = True

    End If

End Sub

Затем вы можете вызвать client.Close () (или любое другое желаемое действие) вместо MessageBox.Show () в событии ParentForm_FormClosing

Мой комментарий: вместо этого вы можете поместить оператор AddHandler в событие UserControl Load.

Хотя этот вопрос задавался 5 лет назад, я подумал, что это хорошее решение.

0 голосов
/ 04 марта 2010

Я полагаю, что вы вызываете SaveLayout () не из того места. Макет следует сохранять только после внесения изменений в сам DXGrid, который не имеет ничего общего с панелью.

Вы можете достичь этого, обрабатывая

GridView_ShowCustomizationForm

Пример кода

  Private Sub GridView_ShowCustomizationForm(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles GridView.ShowCustomizationForm
    Dim gView As DevExpress.XtraGrid.Views.Grid.GridView = CType(sender, DevExpress.XtraGrid.Views.Grid.GridView)
    AddHandler gView.CustomizationForm.FormClosing, AddressOf SaveGridSettings
End Sub

Private Sub SaveGridSettings()

 Grid.MainView.SaveLayoutToXml("c:\Settings.xml")

End Sub
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...