如何解决VB.NET : 特殊事件
使用 VB.NET,是否可以区分来自用户操作的事件和来自代码的事件?
这就是我问这个的原因: 我有一个用户可以编辑的数据网格,我想根据单元格更改检测更新他们键入的内容(请参阅下面的代码)。但是当程序从数据网格更新单元格时,这些更新被检测为单元格更改(如预期的那样)。有没有办法以不同的方式处理用户所做的单元格更改和应用程序本身所做的单元格更改?
Sanctum
解决方法
我曾经使用以下模式来解决这个问题:
-
定义一个变量
Private m_eventLock As Integer
-
在您可以触发事件的方法中,执行以下操作
Private Sub DoStuffThatCascasedLotsOfEvents() m_eventLock += 1 Try 'NORMAL LOGIC GOES HERE Finally m_eventLock -= 1 End Try End Sub
(你可能有不止一种方法遵循这个模式,这很好)
-
在你的事件处理程序中
Private Sub myControl_MyEvent(source As Object,args As EventArgs) If m_eventLock > 0 Then Return ' THE REST OF YOUR NORMAL LOGIC End Sub
我遵循了 Jimi 的最后一个建议,并使用颜色来解决我的问题:当应用程序编辑一行时,它的颜色设置为浅绿色。 这不是我想的完全解决方案,但到目前为止效果很好。
Private Sub add_linked_obj_datagrid_CellValueChanged(ByVal sender As Object,ByVal e As System.Windows.Forms.DataGridViewCellEventArgs) Handles add_linked_obj_datagrid.CellValueChanged
Dim cellValue As String = add_linked_obj_datagrid.Rows(e.RowIndex).Cells(e.ColumnIndex).Value?.ToString()
If add_linked_obj_datagrid.Rows(e.RowIndex).DefaultCellStyle.BackColor <> Color.LightGreen Then
Select Case e.ColumnIndex
Case 0
add_linked_obj_datagrid.Rows(e.RowIndex).Cells(e.ColumnIndex).Value = LCase(cellValue)
Select Case cellValue
Case "facebook","twitter","instagram","youtube","dailymotion","site web","twitch","hashtag"
add_linked_obj_datagrid.Rows(e.RowIndex).DefaultCellStyle.BackColor = Color.LightGreen
Case Else
Dim msg_error_type_interdit As String = "Le type" & cellValue & " n'est pas pris en charge."
MsgBox(msg_error_type_interdit,MsgBoxStyle.Exclamation)
End Select
Case 1
add_linked_obj_datagrid.Rows(e.RowIndex).Cells(0).Value = get_type_objet_from_value(cellValue,True)
add_linked_obj_datagrid.Rows(e.RowIndex).Cells(1).Value = clean_value_objet(add_linked_obj_datagrid.Rows(e.RowIndex).Cells(1).Value,add_linked_obj_datagrid.Rows(e.RowIndex).Cells(0).Value)
add_linked_obj_datagrid.Rows(e.RowIndex).DefaultCellStyle.BackColor = Color.LightGreen
End Select
End If
End Sub
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。