在VB.NET中遍历Devexpres文本编辑控件

在VB.NET中遍历Devexpres文本编辑控件,vb.net,devexpress,userform,textedit,xtraeditors,Vb.net,Devexpress,Userform,Textedit,Xtraeditors,是否有人可以帮助在vb.net中的XTRAFORM中遍历DevExpress文本编辑控件 我实际上试图做的是通过使用EditValue和OldEditValue属性拦截FormClosing事件中的任何值更改 我需要告诉你,我的控件包含在XtraTab和XtraPanel容器中 以下是我尝试的: Public Function TextEditChangesOccured(frm As XtraForm) As Boolean Dim result As Boolean For

是否有人可以帮助在vb.net中的XTRAFORM中遍历DevExpress文本编辑控件

我实际上试图做的是通过使用EditValue和OldEditValue属性拦截FormClosing事件中的任何值更改

我需要告诉你,我的控件包含在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
公共函数TextEditChangesOccured(frm作为XtraForm)作为布尔值
将结果设置为布尔值
对于frm.控件中的每个ctrl As BaseEdit
如果ctrl的类型为TextEdit,则
如果ctrl.EditValue ctrl.OldEditValue,则
结果=真
其他的
结果=错误
如果结束
如果结束
下一个
返回结果
端函数
私有子MyXtraForm_FormClosing(发件人作为对象,e作为FormClosingEventArgs)处理MyBase.FormClosing
如果TextEditChanges治愈了(我),那么
DevExpress.XtraEditors.XtraMessageBox.Show(“已发生更改!”,My.Application.Info.AssemblyName,MessageBoxButtons.OK,MessageBoxIcon.Information)
如果结束
端接头
但它表示无法将XtraTab控件转换为TextEdit控件


非常感谢您的帮助。

要使您的代码正常工作,只需按如下方式更改您的代码片段:

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