将Button的Enabled属性绑定到变量,并使两个不同Button的此属性互斥

来源:互联网 发布:电视棒软件安卓版 编辑:程序博客网 时间:2024/05/01 03:56

在论坛上提问,没得到回答.自己找了找.找到这么个办法.也实现了,不知道有没有更好的办法.请指教.

问题:http://topic.csdn.net/u/20120925/12/a817761e-08c7-46f6-ac01-f48abe237504.html?39283


.net framework自带的绑定属性Contros.DataBindings,在msdn上有详细说明.

不过这个绑定和我预想的有点不一样,它绑定的数据源只能是"实现 IBindingList  ITypedList 的任何类。包括:DataSet、DataTable、DataView  DataViewManager"。而不是我事先想的,只要和属性的数据类型一样的类型就行.不过这也没什么,我用的DataTable,将它的列的数据类型设置成想要的就行了.我再用的过程中也发现数据源也可以是其他控件的属性,当然前提他们的数据类型要适合.


直接上代码吧.

窗体Form1,两个按钮btnStartUpd和btnStopUpd,分别对应上图中的"开始数据更新"和"停止数据更新"

   '系统各种状态,两个Button的数据源    Dim ledStatus As New DataTable    Private Sub InitDt()        Dim clms As String() = New String() {"isNotUpdating", "isUpdating"}        For i As Integer = 0 To clms.Length - 1            Dim clmName As String = clms(i).ToString            Dim clm As DataColumn = New DataColumn(clmName)            clm.DataType = GetType(Boolean)            If Me.ledStatus.Columns.IndexOf(clm) = -1 Then                Me.ledStatus.Columns.Add(clm)            End If        Next        Me.ledStatus.Rows.Clear()        Dim newRow As DataRow = Me.ledStatus.NewRow        newRow.Item("isNotUpdating") = True        newRow.Item("isUpdating") = False        Me.ledStatus.Rows.Add(newRow)        AddHandler ledStatus.RowChanged, AddressOf s    End Sub
''' <summary>    ''' 当更改开始按钮的Enabled属性时,将停止按钮的Enabled属性值置为相反的值    ''' 其实在给数据源的isNotUpdating列赋值时同时给isUpdating列赋相反值也能实现,不过就违背初衷了    ''' 更重要的是按现在的方法,可以同时更新更多个有关联的控件的属性,而不必每次都一一列出.    ''' </summary>    ''' <param name="sender"></param>    ''' <param name="e"></param>    ''' <remarks></remarks>
    Private Sub s(ByVal sender As Object, ByVal e As System.Data.DataRowChangeEventArgs)        Dim nu As Boolean = e.Row.Item("isNotUpdating")        Dim u As Boolean = e.Row.Item("isUpdating")        Console.WriteLine("nu:" & nu.ToString & ";u:" & u.ToString)        If nu <> u Then
            '这里必须有这个判断,否则就无限递归了            Exit Sub        Else            Dim nnu As Boolean = Not nu            e.Row.Item("isUpdating") = nnu        End If    End Sub    Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load        Try            Me.InitDt()            Me.btnStartUpd.DataBindings.Add(New Binding("Enabled", ledStatus, "isNotUpdating"))            Me.btnStopUpd.DataBindings.Add(New Binding("Enabled", ledStatus, "isUpdating"))        Catch ex As Exception            MsgBox(ex.Message, MsgBoxStyle.Critical, "载入异常")            Me.Close()            Return        End Try    End Sub
    '开始按钮
    Private Sub btnStartUpd_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnStartUpd.Click        Me.ledStatus.Rows(0).Item("isNotUpdating") = False    End Sub    '停止按钮    Private Sub btnStopUpd_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnStopUpd.Click        Me.ledStatus.Rows(0).Item("isNotUpdating") = True    End Sub

现在就实现我的目的了,当开始更新数据的时候,我将变量置为false,按钮就不可以点了.当出异常或者其他问题时,就把变量置为true,用户可以通过点击开始按钮,重新开始数据更新.

其实呢,在按钮的click事件中加个判段就可以,不过为了以后更复杂的功能.还是实现这要比较保险.

原创粉丝点击