rolandf69 Geschrieben 26. März 2006 Teilen Geschrieben 26. März 2006 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 Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Trux Geschrieben 26. März 2006 Teilen Geschrieben 26. März 2006 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. Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
adragon Geschrieben 27. März 2006 Teilen Geschrieben 27. März 2006 Hallo darf man fragen was du vor hast?.. Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
rolandf69 Geschrieben 27. März 2006 Autor Teilen Geschrieben 27. März 2006 Hallo! Der Grund für meine Frage wird im ersten Text erklärt! mfg Roland Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Klotzkopp Geschrieben 27. März 2006 Teilen Geschrieben 27. März 2006 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. Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
rolandf69 Geschrieben 28. März 2006 Autor Teilen Geschrieben 28. März 2006 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 Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Empfohlene Beiträge
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.