Vb.net 重新启用带有数据绑定子项的GroupBox时,只有第一个子项重新启用
我有一个带有子按钮的groupbox。所有子按钮都有其.Enabled数据绑定,以形成级别布尔值。为了排除故障,我还将布尔值绑定到标签。这是我在一个更大的应用程序中遇到的问题的最小再现 禁用groupbox可以正常工作 从屏幕截图中可以看出,重新启用groupbox不会带来任何影响。按钮3应该重新启用。没有。为什么?Vb.net 重新启用带有数据绑定子项的GroupBox时,只有第一个子项重新启用,vb.net,winforms,data-binding,groupbox,Vb.net,Winforms,Data Binding,Groupbox,我有一个带有子按钮的groupbox。所有子按钮都有其.Enabled数据绑定,以形成级别布尔值。为了排除故障,我还将布尔值绑定到标签。这是我在一个更大的应用程序中遇到的问题的最小再现 禁用groupbox可以正常工作 从屏幕截图中可以看出,重新启用groupbox不会带来任何影响。按钮3应该重新启用。没有。为什么? Imports System.ComponentModel Public Class Form1 Implements INotifyPropertyChanged
Imports System.ComponentModel
Public Class Form1
Implements INotifyPropertyChanged
Private _canClone As Boolean = True
Private _canEdit As Boolean = True
Public Property CanClone As Boolean
Get
Return _canClone
End Get
Set(value As Boolean)
_canClone = value
RaiseEvent PropertyChanged(Me, New PropertyChangedEventArgs("CanClone"))
End Set
End Property
Public Property CanEdit As Boolean
Get
Return _canEdit
End Get
Set(value As Boolean)
_canEdit = value
RaiseEvent PropertyChanged(Me, New PropertyChangedEventArgs("CanEdit"))
End Set
End Property
Public Event PropertyChanged As PropertyChangedEventHandler Implements INotifyPropertyChanged.PropertyChanged
Private Sub Button2_Click(sender As Object, e As EventArgs) Handles Button2.Click
GroupBox1.Enabled = Not GroupBox1.Enabled
End Sub
Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
Button1.DataBindings.Add(New Binding("Enabled", Me, "CanClone" , True, DataSourceUpdateMode.OnPropertyChanged))
Button3.DataBindings.Add(New Binding("Enabled", Me, "CanEdit" , True, DataSourceUpdateMode.OnPropertyChanged))
Label1 .DataBindings.Add(New Binding("Text", Me, "CanClone" , True, DataSourceUpdateMode.OnPropertyChanged))
Label3 .DataBindings.Add(New Binding("Text", Me, "CanEdit" , True, DataSourceUpdateMode.OnPropertyChanged))
End Sub
End Class
无法100%确定GroupBox为什么会这样做,但由于您使用的是数据绑定,因此不应使用GroupBox.Enabled属性处理此问题。您的单击事件应该只执行
CanEdit=Not CanEdit
,以及CanClone=Not CanClone
。无论如何都需要禁用组框,以便用户在某些活动进行时无法与其交互。我可以做一个丑陋的黑客,比如cacheCanClone=CanClone,disable,re-enable,CanClone=cacheCanClone,但我只想作为最后的手段来做。但是你在这里有竞争的力量。CanEdit和CanClone属性相对于父容器。两者都想影响按钮的Enabled属性。值得一提的是,当您使用面板代替GroupBox时,会发生相同的情况。为什么会有任何不同?这是同一个问题。你必须重新考虑你想怎么做。