gpt4 book ai didi

vb.net - 将 textchanged 事件设置为仅在用户而不是程序实际输入文本时触发

转载 作者:行者123 更新时间:2023-12-04 05:52:20 25 4
gpt4 key购买 nike

Windows 窗体应用程序。 VB .NET 4.0 在我的应用程序中,我有一个全局 bool 变量,用于跟踪何时进行更改以及何时保存更改,称为 changesSaved。在关闭时,即使它在关闭窗口之前检查此变量的值。我正在使用 textchanged 事件在文本更改时自动将 changesSaved 的值更改为 FALSE。问题:组框项目正在动态填充,因此用户可以编辑值或只是查看它们。这种动态填充导致 textchanged 事件触发,因为程序正在更改框的文本值以将值放入存储在数据库中的值。除非用户自己在文本框中输入一个或多个值,否则 textchanged 事件不应触发。有没有办法指定源我猜你可以说文本更改事件或其他方式,以便它只会触发当用户输入信息时.???函数如下:第一个由加载事件调用以将值放入框中...下一个是由于第一个而被调用的函数,也是导致问题的函数..

Private Sub loadProperty(ByVal x As Integer)
Dim _property As property_info = db.property_info.Single(Function(s) s.idProperties = x)
p_settingsCity.Text = _property.city.ToString
p_settingsState.Text = _property.state.ToString
p_settings_PropertyName.Text = _property.property_Name.ToString
p_settingsZipCode.Text = _property.zipcode.ToString
p_settings_Address.Text = _property.address1.ToString
p_settingsCity.Text = _property.city.ToString
p_settingsState.Text = _property.state.ToString
If _property.AllowRentProration = 1 Then
RentProrate.Checked = True
Else
RentProrate.Checked = False
End If
RentProrate.Visible = True
End Sub


Private Sub PropertyTextChanged(ByVal sender As Object, ByVal e As System.EventArgs) Handles PropertyDetailsGroup.TextChanged
ChangesSaved = False
End Sub

最佳答案

几种不同的方式。

既然你只是在做ChangesSaved = FalseTextChanged事件,只需将其设置为 True在您以编程方式更新它之后。

Private Sub loadProperty(ByVal x As Integer)
'// code
RentProrate.Visible = True
ChangesSaved = True
End Sub

或者只是删除 TextChanged处理程序,以编程方式更新 TextBox,然后重新添加处理程序。
RemoveHandler PropertyDetailsGroup.TextChanged, AddressOf PropertyTextChanged
PropertyDetailsGroup.Text = "value from database"
AddHandler PropertyDetailsGroup.TextChanged, AddressOf PropertyTextChanged

实现 INotiftyPropertyChanged 接口(interface)并使用 Databinding将是另一种方式,实际上更清洁。您不需要表单级别的标志,您可以捕获用户在 Class 级别所做的任何更改,如下所示:
Public Class TestClass
Implements INotifyPropertyChanged

Public Event PropertyChanged(ByVal sender As Object, ByVal e As PropertyChangedEventArgs) Implements INotifyPropertyChanged.PropertyChanged

Private _IsDirty As Boolean = False
Private _TextValue As String = String.Empty

Private Sub OnPropertyChanged(ByVal propertyName As String)
_IsDirty = True
RaiseEvent PropertyChanged(Me, New PropertyChangedEventArgs(propertyName))
End Sub

Public ReadOnly Property IsDirty() As Boolean
Get
Return _IsDirty
End Get
End Property

Public Property TextValue() As String
Get
Return _TextValue
End Get
Set(ByVal value As String)
If value <> _TextValue Then
_TextValue = value
OnPropertyChanged("TextValue")
End If
End Set
End Property

End Class

关于vb.net - 将 textchanged 事件设置为仅在用户而不是程序实际输入文本时触发,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9931971/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com