将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事件中加个判段就可以,不过为了以后更复杂的功能.还是实现这要比较保险.
- 将Button的Enabled属性绑定到变量,并使两个不同Button的此属性互斥
- WPF 绑定到父元素属性 多行Text的Button
- button的css属性
- Button的onClick属性
- Button的EdgeInsets属性
- WPF Button的属性 Content绑定字符串失败
- Button.UseSubmitBehavior 属性的使用
- Button控件的UseSubmitBehavior属性
- button控件的.Attributes属性
- button标签的type属性
- 居中显示并旋转 android Button 里的属性drawableLeft
- Button属性
- Button属性
- Button属性
- Button 属性
- 【iOS/OC】互斥button的实现
- struts button 的 property 属性用法
- js 设置button 的disabled属性
- Qt创建文件夹
- App自适应draw9patch不失真背景
- 单元测试中的模式
- 【Android基础】Activity的启动模式(android:launchMode)
- android imageview设置图片的小问题
- 将Button的Enabled属性绑定到变量,并使两个不同Button的此属性互斥
- updateprogress用法
- Android 压缩Post请求数据
- 七夕怀念
- 都是奖学金惹的祸
- Baidu:C#利用百度来搜索网页、图片、视频等等
- 杂谈人生
- Oracle 知识点滴
- Linux C调用C++库