4

Visual StudioとSharpDevelopの両方が、同じ方法でイベントを処理するようにデリゲートを設定することはありません。それらの設定方法は少し異なります。これにより、ある場所でVSを使用し、別の場所(同じプロジェクトで)で#Developを使用することが困難になります。

たとえば、VBでは、VisualStudioは次のことを行います。

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

私は、「このプロジェクトはオープン ソースであり、コードベースは自分で変更してください」と言う人々に通常同意する人ではありませんが、これは有効な答えである可能性がある 1 つのケースです。

#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 のソースに貢献する必要さえあるごくまれなケースの 1 つです。この特定のケースのために。

#Develop for Visual Basic を使用している他のすべての人は、それを高く評価すると確信しています。

于 2009-03-03T02:14:27.740 に答える
4

それらを .designer から取り出し、コード ビハインドのコンストラクターで手動で接続します。.designer は、使用するツールのデザイナーによって再生成されます

于 2009-02-19T19:57:03.717 に答える
0

これは最も実用的な提案ではありませんが、これで作業が完了することを約束します。

#開発はオープンソースです。したがって、理論的には、コード ベースを Visual Studio.net と同じ動作に変更することができます...これがどの程度関与するかはわかりませんが、私の考えを共有したいと思いました...

自分で変更する代わりに、コア チームに機能リクエストとして連絡することもできます。おそらく寄付が役立つでしょう... 他の人もこの変更に興味があるかもしれません.

よろしく、フランク V.

于 2009-03-03T01:59:04.563 に答える