【发布时间】:2021-02-15 09:31:03
【问题描述】:
使用 VB.NET,是否有办法区分来自用户操作的事件和来自代码的事件?
这就是我问这个的原因: 我有一个用户可以编辑的数据网格,我想根据单元格更改检测更新他们键入的内容(参见下面的代码)。但是当程序从数据网格更新单元格时,这些更新会被检测为单元格更改(如预期的那样)。有没有办法以不同的方式处理用户所做的单元格更改和应用程序本身所做的单元格更改?
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()
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"
Exit Sub
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)
add_linked_obj_datagrid.Rows(e.RowIndex).Cells(e.ColumnIndex).Value = Nothing
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)
End Select
End Sub
【问题讨论】:
-
也许改为处理
EndEdit事件?或者直接处理EditingControlShowing中的TextBox控件。或者提供一个带有自己的 TextBox / RichTextBox 控件的自定义列,您可以在其中管理所有需要的内部逻辑。
标签: .net vb.net event-handling