Zum Inhalt springen
View in the app

A better way to browse. Learn more.

Fachinformatiker.de

A full-screen app on your home screen with push notifications, badges and more.

To install this app on iOS and iPadOS
  1. Tap the Share icon in Safari
  2. Scroll the menu and tap Add to Home Screen.
  3. Tap Add in the top-right corner.
To install this app on Android
  1. Tap the 3-dot menu (⋮) in the top-right corner of the browser.
  2. Tap Add to Home screen or Install app.
  3. Confirm by tapping Install.

Methode die mit EventHandler verbunden ist ermitteln

Empfohlene Antworten

Veröffentlicht

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

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.

Hallo!

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

mfg Roland

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.

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

Archiv

Dieses Thema wurde archiviert und kann nicht mehr beantwortet werden.

Configure browser push notifications

Chrome (Android)
  1. Tap the lock icon next to the address bar.
  2. Tap Permissions → Notifications.
  3. Adjust your preference.
Chrome (Desktop)
  1. Click the padlock icon in the address bar.
  2. Select Site settings.
  3. Find Notifications and adjust your preference.