2015-03-31 35 views
1

我有5個文本框,雙擊可編輯。對於多個文本框WPF的一個功能

下面是我爲一個文本框寫的方法。

private void TextBox_MouseDoubleClick(object sender, MouseButtonEventArgs e) 
     { 
      txtFirstLctrTime.IsReadOnly = false; 
      txtFirstLctrTime.Background = new SolidColorBrush(Colors.White); 
      txtFirstLctrTime.Foreground = new SolidColorBrush(Colors.Black); 
     } 

有什麼辦法,我可以使用同樣的方法對所有文本框,而不是對所有寫不同的方法?我是相當新的編程

+1

只是一個設計問題:爲什麼?用戶是否希望不得不雙擊文本框才能編輯?通常用戶知道:textbox gray =>禁用,textbox white =>可編輯。爲什麼混淆用戶? – 2015-03-31 12:42:11

回答

3

你可以在這個處理程序到所有文本框。然後你查看發件人,因爲這是你實際點擊文本框:

private void TextBox_MouseDoubleClick(object sender, MouseButtonEventArgs e) 
    { 
     var textBox = sender as TextBox; 

     textBox.IsReadOnly = false; 
     textBox.Background = new SolidColorBrush(Colors.White); 
     textBox.Foreground = new SolidColorBrush(Colors.Black); 
    } 

你應該看看MVVM和數據綁定的思想,有點擊處理程序和代碼隱藏有它的侷限性。

+0

非常感謝。完美工作。 – Richa 2015-03-31 12:43:03

+0

請注意,如果您將事件處理程序附加到除文本框之外的任何其他位置,則可能會引發NullReferenceException。不應該是一個問題,只是爲了指出。 – 2015-03-31 12:43:30

+0

@ThorstenDittmar我剛剛將它連接到文本框,所以我想不應該有任何問題:) – Richa 2015-03-31 12:47:18

1

附上相同的處理所有的文本框,並使用發件人的說法得到其引發的事件文本框實例:

private void MouseDoubleClick(object sender, MouseButtonEventArgs e) 
{ 
    TextBox textBox = (TextBox)sender; 
    textBox.IsReadOnly = false; 
    textBox.Background = new SolidColorBrush(Colors.White); 
    textBox.Foreground = new SolidColorBrush(Colors.Black); 
} 
0

是的,有一種方法。發件人是一個參數,它可以告訴你哪個控件觸發了這個事件。看看我的例子如下:

private void TextBox_MouseDoubleClick(object sender, MouseButtonEventArgs e) 
{ 
    TextBox tbWhichFiredThisEvent = sender as TextBox; 
    if(tbWhichFiredThisEvent != null) 
    { 
    tbWhichFiredThisEvent.IsReadOnly = false; 
    // ... etc. 
    } 
} 
0

另一種選擇是從TextBox繼承並實現OnDoubleClick方法的具體行爲。

這樣你就可以在不用重複代碼的情況下對不同的視圖進行控制。

+0

任何方式,我可以選擇組合框只在特定面板和使用上面的方法? – Richa 2015-03-31 13:10:19

+0

對不起,我沒有明白你的意思 – 2015-03-31 13:51:07