2010-03-30 88 views
1

说我有这个类:C#更新实例属性

class block999 
{ 
string parm1; 
string parm2; 
string parm3; 
string parm4; 
string parm5; 

block999(){} 

setValue(object sender, RoutedEventArgs e) 
{ 
} 
} 

而与此代码的形式:

block999 B999 = new block999();  

TextBox parm1 = new TextBox(); 
TextBox parm2 = new TextBox(); 
TextBox parm3 = new TextBox(); 
TextBox parm4 = new TextBox(); 
TextBox parm5 = new TextBox(); 

parm1.LostFocus += new RoutedEventHandler(B999.setValue); 
parm2.LostFocus += new RoutedEventHandler(B999.setValue); 
parm3.LostFocus += new RoutedEventHandler(B999.setValue); 
parm4.LostFocus += new RoutedEventHandler(B999.setValue); 
parm5.LostFocus += new RoutedEventHandler(B999.setValue); 

如何设置正确的属性的setValue方法假设实例属性名称==文本框的名称?

+0

我会创建一个字符串(修剪和小写的值)指向可调用事件处理程序。这在Python中非常容易,但功能是一流的公民。然而,.Net最近从其他范例中借用了很多功能,所以我敢打赌它也可以做到这一点。 – 2010-03-30 20:44:49

+0

你想对这些值进行验证吗?为什么你想引用其他字符串变量的值? – 2010-03-30 20:46:18

+1

等一下,我一定很困惑......如果你只有5个控件,那么5个SetValue方法的表现非常相似,这并不是一个可怕的延伸。也许你应该使用WPF,其中绑定可以创建声明? – 2010-03-30 20:47:42

回答

2

由于您使用的是RoutedEventArgs,我假设您使用的是WPF(或者SL)。

我认为最好的选择是在你的班级的文本框和字段之间设置data bindings。如果你不想这样做,我会建议只要任何文本框发生变化就更新所有的字段。

无法从代码访问局部变量的名称。所以你可能无法获得文本框的名称。如果他们是你的课堂上的领域或属性,理论上你可以使用反射来做到这一点,但我不会推荐这种解决方案。

1

定义“文本框名称”的含义。它(暂时)分配给它的变量的名称是没有意义的。您可以使用控件的名称属性,除了您发布的示例中,您从不分配它。如果你是,它将只是:

setValue(object sender, RoutedEventArgs e) 
{ 
     TextBox tb = sender as TextBox; 
     switch(tb.Name) 
     { 
      case "parm1": 
      this.parm1 = .... 
      // etc 

     } 
}