2015-10-07 211 views
0

在我的代碼創建文本框的數組:WPF C#添加事件處理程序

namespace TCalc 
{ 
    public partial class MainWindow : Window 
    { 
     public TextBox[] pubAltArray; 

     public MainWindow() 
     { 
      InitializeComponent(); 

      pubAltArray = new TextBox[10]; 

然後,我創建文本框編程使用下面的代碼:

private void generatePublishedTxtBox() 
{ 
    for (int i = 0; i < 10; i++) 
    { 
     TextBox pubAlt = new TextBox(); 
     grid_profile.Children.Add(pubAlt); 
     pubAlt.SetValue(Grid.RowProperty, 1); 
     ... 
     pubAltArray[i] = pubAlt; 
    } 
} 

比我有一些常規的我想在每個TextBox的內容變化時運行:

private void doTheStuff(object sender, TextChangedEventArgs e) 
{ 
... 
} 

所以我試着添加事件處理程序du然而環新TextBox的定義都沒有成功:

pubAlt.TextChanged += new System.EventHandler(doTheStuff()); 

pubAlt.TextChanged += RoutedEventHandler(calculateCorAlts()); 

任何暗示我嗎?

+0

這是一個關於c#的基本理解,而不是別的。我可以想象,你將很難體驗WPF(除非你是一些XAML設計師,但現在想學習C#)。 – Hopeless

+0

在問這裏之前,仔細檢查調試器說的和谷歌它。 – dytori

回答

1

嘗試:

pubAlt.TextChanged += new TextChangedEventHandler(doTheStuff); 

或:

pubAlt.TextChanged += doTheStuff; 

兩條線都做同樣的事情。第二個只是第一行的簡寫,因爲它使代碼更易於閱讀。

+0

這實際上就是我在那裏試圖簡化問題代碼時所犯的錯誤和錯誤。無論如何,我收到一個錯誤CSC#沒有超載'doTheStuff'匹配委託'TextChangedEventHandler'。謝謝 –

+0

您的doTheStuff方法必須具有以下簽名:'void doTheStuff(object sender,System.Windows.Controls.TextChangedEventArgs e)'。確保你使用'TextChangedEventArgs'的命名空間是正確的。 –

+0

這實際上做的東西!你能解釋一下爲什麼我需要在這種情況下添加System.Windows.Controls? –

0

您在調用方法()。更改您的代碼是這樣的:

pubAlt.TextChanged += new System.EventHandler((s,e) => doTheStuff()); 
pubAlt.TextChanged += RoutedEventHandler((s,e) =>calculateCorAlts()); 

您的方法與它所要求的不匹配。

+0

這實際上就是我在那裏試圖簡化問題代碼時所犯的錯誤和錯誤。無論如何,我收到一個錯誤CSC#沒有超載'doTheStuff'匹配委託'TextChangedEventHandler'謝謝 –

+0

我更新了代碼。我假設你的參數和事件處理函數一樣。 –