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会重做它,有重复的声明,当然还有编译时错误。
有没有人知道解决此问题的方法,某种方式来自定义默认处理程序?即使它只是某种方式可以关闭它们,所以它可以手动输入?
答案 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相同的行为......我不确定这可能涉及多少,但我想我会分享我的想法......
作为改变自己的替代方案,您可以将此作为功能请求与核心团队联系。也许捐赠会有所帮助......其他人也可能对这种变化感兴趣。
此致 弗兰克五世。