System.Reflection.PropertyInfo.SetValue () aufrufen Standardereignishandler Schaltfläche [geschlossen]

StackOverflow https://stackoverflow.com/questions/309706

  •  08-07-2019
  •  | 
  •  

Frage

Also ich bin nicht wirklich sicher, warum dies geschieht, aber ich laufe durch einige DataRows, wo ich die Kontrolle Namen haben, Eigentum und Wert, die ich will einzustellen. Alles funktioniert gut, außer wenn ich die Text-Eigenschaft einer Schaltfläche eingestellt. Aus irgendeinem Grund wird das Click-Ereignis genannt ...

Hier einige der Code, den ich habe:

string controlName, value, property;
Control currentControl = null;
System.Reflection.PropertyInfo propertyInfo = null;

// run through all rows in the table and set the property
foreach (DataRow r in languageDataset.Tables[_parentForm.Name].Rows)
{
  controlName = r["ControlName"].ToString().ToUpper();
  value = r["Value"].ToString();
  property = r["Property"].ToString();

  // check all controls on the form
  foreach (Control c in formControls)
  {
    // only change it if its the right control
    if (c.Name.ToUpper() == controlName)
    {
      propertyInfo = c.GetType().GetProperty(property);

      if (propertyInfo != null)
        propertyInfo.SetValue(c, value, null);  ******Calls Event Handler?!?!******
      //

      currentControl = c;
      break;
    }
  }
}

Also, warum in der Welt würde es den Event-Handler aufrufen, wenn Sie den Wert einstellen? Hier ist, was ich Einstellung mit, dass verursacht dies:

<SnappletChangePassword>  
  <ControlName>buttonAcceptPassword</ControlName>
  <Property>Text</Property>  
  <Value>Accept</Value>
</SnappletChangePassword>
War es hilfreich?

Lösung

Ich kann nicht reproduzieren dies mit einem einfachen kurzen, aber komplettem Programm:

using System;
using System.Drawing;
using System.Reflection;
using System.Windows.Forms;

class Test
{
    static void Main()
    {
        Button goButton = new Button { 
            Text = "Go!",
            Location = new Point(5, 5)
        };

        Button targetButton = new Button {
            Text = "Target",
            Location = new Point(5, 50)
        };
        goButton.Click += (sender, args) => SetProperty(targetButton, "Text", "Changed");
        targetButton.Click += (sender, args) => MessageBox.Show("Target clicked!");

        Form f = new Form { Width = 200, Height = 120,
                Controls = { goButton, targetButton }
        };
        Application.Run(f);
    }

    private static void SetProperty(object target, string propertyName, object value)
    {
        PropertyInfo property = target.GetType().GetProperty(propertyName);
        property.SetValue(target, value, null);
    }
}

Können Sie mit einem ähnlich kompletten Programm kommen, die nicht es zeigen?

Andere Tipps

Leider nein, ich kann es nicht reproduzieren entweder. Ich bin mir nicht sicher, was es verursacht wurde, aber alles, was ich tat, zu beheben war es die Taste löscht und dort zurückstellen.

nicht sicher, was es ist, aber danke für den Code.

Sie nicht schreiben, dass in .NET2.0 nicht wahr?

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top