Zum Inhalt springen

Methode die mit EventHandler verbunden ist ermitteln


rolandf69

Empfohlene Beiträge

Hallo!

Gibt es eine Möglichkeit zur Laufzeit (mit Reflection) die Methoden festzustellen, die mit dem Click-Event eines Controls verbunden sind (.NET

Framework 1.1)?

Ich möchte nämlich versuchen, zur Laufzet die verbundenen Methoden durch eine ander Methode zu tauschen. Leider habe ich bis jetzt nicht herausfinden können wie ich zu den entsprechenden Informationen gelangen kann. Wenn ich den Code debuge kann ich mir die gesuchte Information ansehen (siehe Anhang: csharp_debug_menuitem_click.jpg, Markierung zeigt die mit dem Click-Event verbundene Methode, Breakpoint bei Methode btnStart_Click).

Ich bin über jede Hilfe dankbar.


using System;

using System.Drawing;

using System.Collections;

using System.ComponentModel;

using System.Windows.Forms;

using System.Data;


namespace EventMethods

{

 public class FrmMain : System.Windows.Forms.Form

 {

  private System.ComponentModel.Container components = null;

  private System.Windows.Forms.MenuItem mnuDatei;

  private System.Windows.Forms.MenuItem mnuHilfe;

  private System.Windows.Forms.MenuItem mnuOeffnen;

  private System.Windows.Forms.MenuItem mnuSpeichern;

  private System.Windows.Forms.MenuItem mnuSpeicherUnter;

  private System.Windows.Forms.MainMenu mnuMain;

  private System.Windows.Forms.MenuItem mnuSeparator;

  private System.Windows.Forms.MenuItem mnuUeber;

  private System.Windows.Forms.TextBox txtResult;

  private System.Windows.Forms.Button btnStart;

  private System.Windows.Forms.Button btnBeenden;

  private System.Windows.Forms.MenuItem mnuBeenden;


  public FrmMain()

  {

   InitializeComponent();

  }


  protected override void Dispose( bool disposing )

  {

   if( disposing )

   {

    if (components != null)

    {

     components.Dispose();

    }

   }

   base.Dispose( disposing );

  }


  private void mnuBeenden_Click(object sender, System.EventArgs e)

  {

   MessageBox.Show("Beenden");

  }


  private void mnuSpeicherUnter_Click(object sender, System.EventArgs e)

  {

   MessageBox.Show("Speichern unter");

  }


  private void mnuSpeichern_Click(object sender, System.EventArgs e)

  {

   MessageBox.Show("Speichern");


  }


  private void mnuOeffnen_Click(object sender, System.EventArgs e)

  {

   MessageBox.Show("Öffnen");

  }


  private void mnuUeber_Click(object sender, System.EventArgs e)

  {

   MessageBox.Show("Über");

  }


  private void btnStart_Click(object sender, System.EventArgs e)

  {

   // TODO.

  }


  private void btnBeenden_Click(object sender, System.EventArgs e)

  {

   this.Close();

  }


  #region Windows Form Designer generated code


  private void InitializeComponent()

  {

   this.mnuMain = new System.Windows.Forms.MainMenu();

   this.mnuDatei = new System.Windows.Forms.MenuItem();

   this.mnuHilfe = new System.Windows.Forms.MenuItem();

   this.mnuOeffnen = new System.Windows.Forms.MenuItem();

   this.mnuSpeichern = new System.Windows.Forms.MenuItem();

   this.mnuSpeicherUnter = new System.Windows.Forms.MenuItem();

   this.mnuSeparator = new System.Windows.Forms.MenuItem();

   this.mnuBeenden = new System.Windows.Forms.MenuItem();

   this.mnuUeber = new System.Windows.Forms.MenuItem();

   this.txtResult = new System.Windows.Forms.TextBox();

   this.btnStart = new System.Windows.Forms.Button();

   this.btnBeenden = new System.Windows.Forms.Button();

   this.SuspendLayout();

   //

   // mnuMain

   //

   this.mnuMain.MenuItems.AddRange(new System.Windows.Forms.MenuItem[] {

                     this.mnuDatei,

                     this.mnuHilfe});

   //

   // mnuDatei

   //

   this.mnuDatei.Index = 0;

   this.mnuDatei.MenuItems.AddRange(new System.Windows.Forms.MenuItem[] {

                      this.mnuOeffnen,

                      this.mnuSpeichern,

                      this.mnuSpeicherUnter,

                      this.mnuSeparator,

                      this.mnuBeenden});

   this.mnuDatei.Text = "Datei";

   //

   // mnuHilfe

   //

   this.mnuHilfe.Index = 1;

   this.mnuHilfe.MenuItems.AddRange(new System.Windows.Forms.MenuItem[] {

                      this.mnuUeber});

   this.mnuHilfe.Text = "Hilfe";

   //

   // mnuOeffnen

   //

   this.mnuOeffnen.Index = 0;

   this.mnuOeffnen.Text = "Öffnen";

   this.mnuOeffnen.Click += new System.EventHandler(this.mnuOeffnen_Click);

   //

   // mnuSpeichern

   //

   this.mnuSpeichern.Index = 1;

   this.mnuSpeichern.Text = "Speichern";

   this.mnuSpeichern.Click += new

System.EventHandler(this.mnuSpeichern_Click);

   //

   // mnuSpeicherUnter

   //

   this.mnuSpeicherUnter.Index = 2;

   this.mnuSpeicherUnter.Text = "Speichern unter...";

   this.mnuSpeicherUnter.Click += new

System.EventHandler(this.mnuSpeicherUnter_Click);

   //

   // mnuSeparator

   //

   this.mnuSeparator.Index = 3;

   this.mnuSeparator.Text = "-";

   //

   // mnuBeenden

   //

   this.mnuBeenden.Index = 4;

   this.mnuBeenden.Text = "Beenden";

   this.mnuBeenden.Click += new System.EventHandler(this.mnuBeenden_Click);

   //

   // mnuUeber

   //

   this.mnuUeber.Index = 0;

   this.mnuUeber.Text = "Über";

   this.mnuUeber.Click += new System.EventHandler(this.mnuUeber_Click);

   //

   // txtResult

   //

   this.txtResult.Anchor =

((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top

| System.Windows.Forms.AnchorStyles.Bottom)

    | System.Windows.Forms.AnchorStyles.Left)

    | System.Windows.Forms.AnchorStyles.Right)));

   this.txtResult.Location = new System.Drawing.Point(8, 8);

   this.txtResult.Multiline = true;

   this.txtResult.Name = "txtResult";

   this.txtResult.Size = new System.Drawing.Size(276, 203);

   this.txtResult.TabIndex = 0;

   this.txtResult.Text = "";

   //

   // btnStart

   //

   this.btnStart.Anchor =

((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom

| System.Windows.Forms.AnchorStyles.Left)));

   this.btnStart.Location = new System.Drawing.Point(8, 219);

   this.btnStart.Name = "btnStart";

   this.btnStart.TabIndex = 1;

   this.btnStart.Text = "Start";

   this.btnStart.Click += new System.EventHandler(this.btnStart_Click);

   //

   // btnBeenden

   //

   this.btnBeenden.Anchor =

((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom

| System.Windows.Forms.AnchorStyles.Right)));

   this.btnBeenden.DialogResult = System.Windows.Forms.DialogResult.Cancel;

   this.btnBeenden.Location = new System.Drawing.Point(212, 219);

   this.btnBeenden.Name = "btnBeenden";

   this.btnBeenden.TabIndex = 2;

   this.btnBeenden.Text = "Beenden";

   this.btnBeenden.Click += new System.EventHandler(this.btnBeenden_Click);

   //

   // FrmMain

   //

   this.AutoScaleBaseSize = new System.Drawing.Size(5, 13);

   this.CancelButton = this.btnBeenden;

   this.ClientSize = new System.Drawing.Size(292, 251);

   this.Controls.Add(this.btnBeenden);

   this.Controls.Add(this.btnStart);

   this.Controls.Add(this.txtResult);

   this.Menu = this.mnuMain;

   this.MinimumSize = new System.Drawing.Size(300, 300);

   this.Name = "FrmMain";

   this.Text = "Form1";

   this.ResumeLayout(false);


  }

  #endregion


  /// <summary>

  /// The main entry point for the application.

  /// </summary>

  [STAThread]

  static void Main()

  {

   Application.Run(new FrmMain());

  }

 }

}

mfg Roland

post-33745-14430447309937_thumb.jpg

Link zu diesem Kommentar
Auf anderen Seiten teilen

also du kannst die methode entweder durch -= abbinden, und dann eine neue anbinden, oder du setzt den EventHandler auf null und bindest einen neuen an.

Wenn dir das weiterhilft. ansonsten kannt du die collection sicherlicht auch mit einer schleife durchlaufen und nur eine bestimme abbinden, bin mir dabei aber nicht ganz sicher hab das noch nicht ausprobiert.

Link zu diesem Kommentar
Auf anderen Seiten teilen

Der Grund für meine Frage wird im ersten Text erklärt!
Eigentlich nicht.

Da steht nur, dass du tauschen willst. Da steht nicht, warum du wissen musst, welche Methoden gerade verbunden sind. IMHO riecht das nach einem vermurksten Design. Warum muss dein Programm den Zustand des UI abfragen? Eigentlich sollte sich das Programm den Zustand merken und nur das UI aktualisieren.

Link zu diesem Kommentar
Auf anderen Seiten teilen

Ok, jetzt hab ich dich verstanden. Auf die Fragestellung bin ich eigentlich nur durch zufall gestoßen. Da ich beim Debugen (Bild) die Methode die mit dem Click-Event verbunden ist gesehen habe. Da hab ich mir gedacht, dass ich diese Informationen mit Reflection erhalten müsste. Bis jetzt leider ohne Erfolg.

mfg Roland

Link zu diesem Kommentar
Auf anderen Seiten teilen

Dein Kommentar

Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung wiederherstellen

  Nur 75 Emojis sind erlaubt.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor leeren

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

Fachinformatiker.de, 2024 by SE Internet Services

fidelogo_small.png

Schicke uns eine Nachricht!

Fachinformatiker.de ist die größte IT-Community
rund um Ausbildung, Job, Weiterbildung für IT-Fachkräfte.

Fachinformatiker.de App

Download on the App Store
Get it on Google Play

Kontakt

Hier werben?
Oder sende eine E-Mail an

Social media u. feeds

Jobboard für Fachinformatiker und IT-Fachkräfte

×
×
  • Neu erstellen...