Visual Studio与#Develop - 默认事件处理程序

时间:2009-02-19 19:42:14

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

Visual Studio和SharpDevelop都没有设置委托来以相同的方式处理事件。它们的设置方式略有不同。这使得很难在一个地方使用VS而在另一个地方使用#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

这样就可以声明控件,不仅可以使用不同的范围(这也可能是一个问题,但不是这篇文章的主题),而是有了一个问题。然后通过handle子句为事件处理程序分配它。

<#>在#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 个答案:

答案 0 :(得分:5)

Sharpdevelop是根据LGPL许可证发布的,因此您可以随时获取源代码并进行所需的任何更改。

对于您想要的更改,您可能需要更改或覆盖VBNetDesignerGenerator类中的InsertComponentEvent和CreateEventHandler方法。它位于FormsDesigner项目中。

您可以获得来源here

答案 1 :(得分:4)

将它们从.designer中取出并在后面的代码中的构造函数中手动连接它们。 .designer由您使用的任何工具的设计者重新生成

答案 2 :(得分: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 for Visual Basic的其他人都会欣赏这一点。

答案 3 :(得分:0)

这不是最实用的建议,但我保证会为你完成工作。

#Develop是开源的。所以,从理论上讲,你可以将代码库修改为与Visual Studio.net相同的行为......我不确定这可能涉及多少,但我想我会分享我的想法......

作为改变自己的替代方案,您可以将此作为功能请求与核心团队联系。也许捐赠会有所帮助......其他人也可能对这种变化感兴趣。

此致 弗兰克五世。