4

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

以便声明控件,不仅具有不同的范围(这也可能是一个问题,但不是本文的主题),而且具有 withevents。然后通过handles 子句将事件处理程序分配给它。

在#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

4 回答 4

5

Sharpdevelop 是在 LGPL 许可下发布的,因此您可以随时获取源代码并进行任何您想要的更改。

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

您可以在此处获取源代码。

于 2009-03-01T14:12:54.627 回答
4

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

于 2009-02-19T19:57:03.717 回答
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 的其他所有人都会对此表示赞赏。

于 2009-03-03T02:14:27.740 回答
0

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

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

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

问候,弗兰克 V。

于 2009-03-03T01:59:04.563 回答