2009-02-19 80 views
4

Visual Studio和SharpDevelop不會同時設置委託來處理事件。它們的設置方式有點不同。這使得很難在一個地方使用VS,在另一個地方使用#Develop(在同一個項目上)。Visual Studio與#Develop - 默認事件處理程序

例如,在VB,Visual Studio中執行以下操作:

Private Sub OK_Button_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles OK_Button.Click 
    Me.DialogResult = System.Windows.Forms.DialogResult.OK 
    Me.Close() 
End Sub 

而且......

Friend WithEvents OK_Button As System.Windows.Forms.Button 

使控制聲明,不僅採用了不同的範圍(這可以也是一個問題,但不是這篇文章的主題),但與withevents。事件處理程序然後通過句柄子句分配給它。

在#Develop

,它是這樣做......

Sub OK_ButtonClick(sender As Object, e As EventArgs) 

End Sub 

和...

Private button1 As System.Windows.Forms.Button 

然後,在InitializeComponent方法

AddHandler Me.button1.Click, AddressOf Me.OK_ButtonClick 

最討厭關於這一點的事情,即使它以一種方式完成,另一個ide將重做它,具有重複的聲明,當然,編譯時間錯誤。

有誰知道解決這個問題的方法,有些方法來定製默認處理程序?即使它只是某種可以關閉的方式,所以可以手動輸入。

回答

4

將它們從.designer中取出並在後面的代碼中的構造函數中手動連線。 .designer由您使用的任何工具的設計人員重新生成

+0

任何方式來使自動化,而不是手動做到這一點?我之前用Web服務類來完成它,它真的很吸引人。 – hmcclungiii 2009-02-19 20:26:59

+0

從設計師處剪切和粘貼。 – recursive 2009-03-06 20:44:56

5

Sharpdevelop根據LGPL許可證發佈,因此您始終可以獲取源代碼並進行所需的任何更改。

對於所需的更改,您可能需要更改或重寫VBNetDesignerGenerator類中的InsertComponentEvent和CreateEventHandler方法。它在FormsDesigner項目中。

您可以得到來源here

0

這不會是最實際的建議,但我保證它會爲你完成工作。

#開發是開源的。所以,從理論上講,你可以修改代碼庫與Visual Studio.net一樣的行爲......我不確定這可能是多麼牽扯,但我想我會分享我的想法......

作爲替代方案爲了改變自己,您可以聯繫核心團隊,將其作爲功能請求。也許捐款會有所幫助......其他人也可能對這一變化感興趣。

問候, 弗蘭克V.

4

雖然我不是一個誰通常會跟人說,誰同意「這個項目是開源的,修改自己的代碼庫」,這是一種情況可能是一個有效的答案。

之所以#develop正在做的事情是做它是因爲它是C#如何添加事件處理程序的直接端口的方式,例如,

AddHandler Me.button1.Click, AddressOf Me.OK_ButtonClick 

僅僅是直接翻譯:

this.button1.Click += new EventHandler(OK_ButtonClick); 

如果您正在使用C#,Visual Studio和#Develop將在代碼中處理事件創建完全相同的方式。

很明顯,沒有人關注#Develop中常見的Visual Basic用例,正如我上面所說的,這是一些邊緣情況,你可能需要自己調整代碼,或者甚至可以回饋給這個特定案例的#Develop來源。

我敢肯定,其他人誰使用#Develop爲Visual Basic會對此表示讚賞。