System.Reflection.PropertyInfo.SetValue () appelle le gestionnaire d'événements par défaut du bouton [fermé]

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

  •  08-07-2019
  •  | 
  •  

Question

Je ne sais donc pas vraiment pourquoi cela se produit, mais je suis en train de parcourir quelques DataRows où j'ai le nom du contrôle, la propriété et la valeur que je veux définir. Tout fonctionne bien sauf lorsque je définis la propriété TEXT d'un bouton. Pour une raison quelconque, l'événement click s'appelle ...

Voici une partie du code que j'ai:

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;
    }
  }
}

Alors pourquoi dans le monde appelerait-il le gestionnaire d’événements lorsqu’il définira la valeur? Voici ce que je pose avec ce qui cause ceci:

<SnappletChangePassword>  
  <ControlName>buttonAcceptPassword</ControlName>
  <Property>Text</Property>  
  <Value>Accept</Value>
</SnappletChangePassword>
Était-ce utile?

La solution

Je ne peux pas reproduire cela avec un programme simple mais complet:

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);
    }
}

Pouvez-vous créer un programme similaire similaire, comme le le démontre?

Autres conseils

Malheureusement, non, je ne pouvais pas le reproduire non plus. Je ne suis pas sûr de ce qui l'a provoqué mais tout ce que j'ai fait pour le réparer a été de supprimer le bouton et de le remettre en place.

je ne sais pas ce que c'était, mais merci pour le code.

Vous n'avez pas écrit cela dans .Net2.0, n'est-ce pas?

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top