Перебор элементов управления Devexpres TextEdit в VB.NET

Может ли кто-нибудь помочь перебрать элементы управления DevExpress TextEdit в XTRAFORM в vb.net?

На самом деле я пытаюсь перехватить любые изменения значений в событии FormClosing, используя свойства EditValue и OldEditValue.

Мне может понадобиться сообщить, что мои элементы управления содержатся в контейнерах XtraTab и XtraPanel.

вот что я пробовал:

Public Function TextEditChangesOccured(frm As XtraForm) As Boolean
    Dim result As Boolean
    For Each ctrl As BaseEdit In frm.Controls
        If TypeOf ctrl Is TextEdit Then
            If ctrl.EditValue <> ctrl.OldEditValue Then
                result = True
            Else
                result = False
            End If
        End If
    Next
    Return result
End Function

 Private Sub MyXtraForm_FormClosing(sender As Object, e As FormClosingEventArgs) Handles MyBase.FormClosing
    If TextEditChangesOccured(Me) Then
        DevExpress.XtraEditors.XtraMessageBox.Show("Changes have occured!", My.Application.Info.AssemblyName, MessageBoxButtons.OK, MessageBoxIcon.Information)
    End If
End Sub

но он говорит, что невозможно преобразовать элемент управления XtraTab в элемент управления TextEdit.

Ваша помощь будет высоко оценена.


person Backalife    schedule 14.07.2014    source источник


Ответы (1)


Чтобы ваш код работал, просто измените фрагмент кода следующим образом:

Public Function TextEditChangesOccured(container As Control) As Boolean
    Dim result As Boolean
    For Each ctrl As Control In container.Controls
        Dim bEdit As BaseEdit = TryCast(ctrl, BaseEdit)
        If bEdit IsNot Nothing Then
            Dim tEdit As TextEdit = TryCast(ctrl, TextEdit)
            If tEdit IsNot Nothing Then
                result = result Or (bEdit.EditValue <> bEdit.OldEditValue)
            End If
        Else
            result = result Or TextEditChangesOccured(ctrl)
        End If
    Next
    Return result
End Function

Чтобы обнаружить изменения для всех редакторов в форме, используйте следующий подход:

Partial Public Class Form1
    Inherits Form

    Public Sub New()
        InitializeComponent()
        SubscribeTextEditValueChanged(Me)
    End Sub
    Private Sub SubscribeTextEditValueChanged(ByVal container As Control)
        For Each ctrl As Control In container.Controls
            Dim tEdit As TextEdit = TryCast(ctrl, TextEdit)
            If tEdit IsNot Nothing Then
                AddHandler tEdit.EditValueChanged, AddressOf tEdit_EditValueChanged
            Else
                SubscribeTextEditValueChanged(ctrl)
            End If
        Next ctrl
    End Sub
    Private IsEditValueChanged As Boolean
    Private Sub tEdit_EditValueChanged(ByVal sender As Object, ByVal e As EventArgs)
        IsEditValueChanged = True
    End Sub
    Protected Overrides Sub OnClosing(ByVal e As CancelEventArgs)
        If IsEditValueChanged Then
            ' do some stuff
        End If
        MyBase.OnClosing(e)
    End Sub
End Class
person DmitryG    schedule 14.07.2014
comment
Ах вау! пальцы вверх! Большое спасибо за помощь, Дмитрий, все заработало. Я действительно ценю твою помощь. еще раз спасибо. - person Backalife; 14.07.2014