2008-11-21 5 views
0

Donc, je ne suis pas vraiment sûr pourquoi cela se produit, mais je cours à travers certains DataRows où j'ai le nom du contrôle, la propriété et la valeur que je vouloir définir. Tout fonctionne bien sauf quand je définis la propriété TEXT d'un bouton. Pour une raison quelconque, l'événement click est appelé ...System.Reflection.PropertyInfo.SetValue() appel gestionnaire d'événements par défaut du bouton

est ici 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 serait-il appeler le gestionnaire d'événements lors de la configuration de la valeur? Voici ce que je suis mise avec qui cause ceci:

<SnappletChangePassword> 
    <ControlName>buttonAcceptPassword</ControlName> 
    <Property>Text</Property> 
    <Value>Accept</Value> 
</SnappletChangePassword> 
+0

Êtes-vous absolument certain d'appeler le gestionnaire Click plutôt que le gestionnaire TextChanged? Essayer de reproduire maintenant si - intéressant ... –

Répondre

3

Je ne peux pas reproduire ce avec un simple programme court 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 venir avec un programme de la même complète qui le démontre-t-il?

0

Malheureusement, non je ne pouvais pas le reproduire non plus. Je ne suis pas sûr de ce qui l'a causé, mais tout ce que j'ai fait pour le réparer, c'était effacer le bouton et le remettre là.

pas sûr de ce que c'était, mais merci pour le code.

Vous n'avez pas écrit cela dans .Net2.0 et vous?

Questions connexes