2010-03-30 81 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 

     } 
}