【问题标题】:Visual Studio designer removes HandlesVisual Studio 设计器删除句柄
【发布时间】:2013-06-24 07:27:57
【问题描述】:

this question中提到了我的问题,但答案都集中在问题的其他部分。

我有一个表单中的这个事件处理程序:

Private Sub myDataTable_ColumnChanging(ByVal sender As System.Object, ByVal e As DataColumnChangeEventArgs) Handles myDataSet.myDataTable.ColumnChanged
    If (e.ProposedValue = "") Then
        e.ProposedValue = DBNull.Value
    End If
End Sub

当我打开此表单的设计器,进行任何修改并保存时,Handles 后缀已从代码中删除。我每次都必须重新添加才能达到预期的效果。

我应该提一下,当我编写myDataSet. 时,IntelliSense 不会建议 DataSet 中的任何 DataTables,但是在编写 DataTable 的正确名称后,所有可用的事件都会显示出来,并且代码运行良好。

【问题讨论】:

  • 这很有效,很有意义,谢谢!为什么不将其作为答案提交?

标签: .net vb.net visual-studio-2010


【解决方案1】:
Handles myDataSet.myDataTable.ColumnChanged

Handles 关键字由设计者自动生成。用于从您拖放到表单上的组件或控件订阅事件。您的“myDataSet.myDataTable”对象显然不是这样的组件,我可以从名称中看出,它没有所需的 WithEvents 关键字。看起来您自己键入了 Handles 子句。设计师注意到差异后再次将其删除。

您需要在代码中使用 AddHandler 关键字来订阅该事件。

【讨论】:

    【解决方案2】:

    看看这是否有帮助:

    Private Sub myDataTable_ColumnChanging(ByVal sender As System.Object, ByVal e As _
    DataColumnChangeEventArgs) Handles myDataSet.Tables("myDataTable").ColumnChanged
    

    还要确保数据集声明为类级别。您的部分问题可能是 Intellisense 无法在其范围之外找到数据集。

    【讨论】:

    • 这实际上会导致编译错误; “找不到事件‘表’”。 DataSet 来自数据库,使用设计器制作(在 Designer.vb 中声明),所以我猜它是在类级别声明的。
    • 如前所述,您可能不得不求助于使用 AddHandler 语句
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-11-08
    • 2010-12-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多