2013-06-24 96 views
0

我的問題在this question中提到,但答案都集中在問題的其他部分。Visual Studio設計器刪除句柄

我有一個形式,這個事件處理程序:

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.時,智能感知不會在DataSet中建議任何DataTable,但在寫入DataTable的正確名稱後,所有可用事件都顯示出來,並且代碼運行正常。

+0

這有效,合理,謝謝!爲什麼不把它作爲答案提交? – joharei

回答

0
Handles myDataSet.myDataTable.ColumnChanged 

把手關鍵字是自動生成由設計者。用於從您在表單上放置的組件或控件訂閱事件。你的「myDataSet.myDataTable」對象顯然不是這樣一個組件,我可以從名稱中知道,它不會具有所需的WithEvents關鍵字。看起來像你自己輸入了句柄子句。設計師在注意到差異時再次將其刪除。

您需要在代碼中使用AddHandler關鍵字來訂閱事件。

0

看看這有助於:

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

同時確保數據集被宣佈一流水平。您的部分問題可能是智能感知無法找到範圍之外的數據集。

+0

這實際上會導致編譯錯誤; 「無法找到事件」表「」。 DataSet來自數據庫,並使用設計器(在Designer.vb中聲明)創建,所以我猜它是在類級別聲明的。 – joharei

+0

如上所述,您可能不得不訴諸使用AddHandler語句 – tinstaafl