Visual Studio vs. #develop - Standard-Event-Handler
-
05-09-2019 - |
Frage
Visual Studio und SharpDevelop nicht beiden Teilnehmer einrichten Ereignisse in der gleichen Art und Weise zu handhaben. Die Art, wie sie eingerichtet sind, ist ein wenig anders. Dies macht es schwierig VS an einem Ort und #develop in ein anderes zu verwenden (auf dem gleichen Projekt).
Zum Beispiel in VB, Visual Studio tut das folgende:
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
Und ...
Friend WithEvents OK_Button As System.Windows.Forms.Button
Damit die Steuerung erklärt wird, nicht nur mit einem anderen Bereich (dies kann ein Problem sein, auch, aber nicht das Thema dieses Beitrags), aber mit einem Withevent. Der Event-Handler wird dann durch eine Griffe Klausel zugeordnet.
in #develop wird es so gemacht ...
Sub OK_ButtonClick(sender As Object, e As EventArgs)
End Sub
und ...
Private button1 As System.Windows.Forms.Button
Dann wird in der Methode InitializeComponent
AddHandler Me.button1.Click, AddressOf Me.OK_ButtonClick
Das nervigste über diese, ist, selbst wenn es eine Weise getan wird, werden die anderen ide wiederholen es, dass doppelte Erklärungen, und natürlich Zeitfehler kompilieren.
Kennt jemand eine Möglichkeit, dies zu umgehen, eine Möglichkeit, die Standard-Handler anpassen? auch wenn es nur eine Möglichkeit ist, dass sie ausgeschaltet werden können, so kann es nur manuell eingegeben werden?
Lösung
nehmen sie die .designer aus und verbinden sie hinter dem Code im Konstruktor manuell nach oben. die .designer von dem Designer der regeneriert wird, was auch immer Werkzeug, das Sie verwenden
Andere Tipps
SharpDevelop ist unter einer LGPL-Lizenz veröffentlicht, so dass Sie immer die Quelle bekommen und nehmen Sie die gewünschten Änderungen vor.
Für die Änderungen, die Sie möchten, können Sie benötigen, um die InsertComponentEvent und CreateEventHandler Methoden in der VBNetDesignerGenerator Klasse zu ändern oder außer Kraft setzen. Es ist in dem FormsDesigner Projekt.
können Sie die Quelle hier .
Während ich nicht derjenige bin, der in der Regel mit Menschen zustimmen würde, die sagen, dass „dieses Projekt ist Open Source, ändern Sie den Code-Basis selbst“, ist dies ein Fall, in dem es könnte eine gültige Antwort sein.
Der Grund, warum #develop Dinge so tut es tut es, weil es ein direkter Anschluss ist, wie C # fügt Event-Handler, zum Beispiel
AddHandler Me.button1.Click, AddressOf Me.OK_ButtonClick
ist lediglich eine direkte Übersetzung von:
this.button1.Click += new EventHandler(OK_ButtonClick);
Wenn Sie C # verwendet haben, Visual Studio und #develop wird Ereigniserzeugung in Code genau die gleiche Art und Weise handhaben.
Offensichtlich ist niemand zu der gemeinsamen Visual Basic usecase in #develop besuchen, und wie ich oben sagte, ist dies eine jener Rand Fälle, in denen Sie nur dem Code selbst zu zwicken haben könnten, oder vielleicht sogar auf dem beitragen zurück #develop Quelle für diesen speziellen Fall.
Ich bin sicher, dass alle anderen, die #develop für Visual Basic verwendet würde schätzen.
Das wird nicht der praktischste Vorschlag sein, aber ich verspreche, dass es die Arbeit für Sie erledigen würde.
#develop ist Open Source. Also, theoretisch könnten Sie die Code-Basis auf das gleiche Verhalten wie von Visual Studio.net ändern ... Ich bin nicht sicher, wie beteiligt dies sein könnte, aber ich dachte, dass ich meine Idee teilen würde ...
Als Alternative zur Herstellung der Änderung Ihrer selbst, könnte man das Kernteam um dies als Feature-Request in Verbindung. Vielleicht wäre eine Spende helfen ... Andere auch in dieser Veränderung interessiert sein könnten.
Viele Grüße, Frank V.