2015-10-07 2 views
0

В моем коде я создаю массив TextBoxes:WPF C# добавление обработчика событий программно

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

     public MainWindow() 
     { 
      InitializeComponent(); 

      pubAltArray = new TextBox[10]; 

Затем я создаю TextBoxes программно, используя следующий код:

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; 
    } 
} 

чем у меня есть некоторые рутинную I хотят работать, когда изменяется содержимое каждого 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

Внимательно проверьте, что говорит отладчик и google, прежде чем спрашивать здесь. – dytori

ответ

1

Try:

pubAlt.TextChanged += new TextChangedEventHandler(doTheStuff); 

или:

pubAlt.TextChanged += doTheStuff; 

Обе линии делают то же самое. Второй - это только сокращенная строка для первой строки, поскольку она упрощает чтение кода.

+0

Это на самом деле то, что у меня есть, сделано и ошибка при попытке упростить код для вопроса. Во всяком случае, я получаю сообщение об ошибке CSC# Нет перегрузки для 'doTheStuff' соответствует делегату 'TextChangedEventHandler'. Спасибо –

+0

ваш метод doTheStuff должен иметь следующую подпись: 'void doTheStuff (отправитель объекта, 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

Я обновил код. Я предполагаю, что у вас есть свой параметр так же, как и обработчик событий. –