2010-08-01 4 views
0

Вот ситуация:создать общий обработчик LostFocus событий в C#

http://i962.photobucket.com/albums/ae103/kashyaprakesh/misc/denominationwindow.jpg

У меня есть текстовые поля слева, который принимает значение номинала и другое текстовое поле справа дает общее значение, например. в левом текстовом поле этикетки 1000, если я ставлю значение как 5, то справа значение равно 5000.

Я использовал обработчик событий lostFocus для этого, но нужно ли выполнять обработчик событий потерянного фокуса для каждого текстового поля? Конечно, будет другой путь.

private void textBox6_Leave(object sender, EventArgs e) 
{ 
     MessageBox.Show(e.ToString()); 
     if (textBox6.Text == "") 
     { 
      string y = "0"; 
      textBox6.Text = y; 
      textBox8.Text = y; 
     } 
     else 
     { 
      textBox8.Text = populateTotalAmount(textBox6.Text, 1000); 

     } 
     textBox8.ReadOnly = true; 
    } 

    private string populateTotalAmount(string denominations, int value) 
    { 
     int totalVal = Int32.Parse(denominations) * value; 
     return totalVal.ToString(); 
    } 

Я хотел бы создать общий обработчик событий, который работает на LostFocus мероприятия, а также мне нужно передать другое значение (то есть, 500100 и т.д. и т.д. и т.п.) так, что я могу использовать это значение, чтобы отправить его populateTotalAmount функция.

+1

Полностью не по теме примечание: вы не должны использовать букву х для обозначения умножений, используйте × вместо этого. – svick

ответ

1

Нет никакой веской причины не просто перебрать текстовые поля и вычислить результат. Этот код работает в человеческое время, она не может отличить микросекунду и миллисекунду.

Теперь у вас может быть один Оставить обработчик события для все текстовые поля. TextChanged тоже будет работать, но это дезориентирует.

0

Предполагая, что вы используете WinForms, вы можете создать собственный элемент управления, имеющий значение умножения в качестве свойства, а затем добавить этот элемент управления в форму.

0

Что-то вроде этого (не проверял)

foreach (Control ctrl in Controls) 
{ 
    if (ctrl is TextBox && ctrl.Name.StartsWith("math")) 
     ctrl.Focused += OnFocus; 
} 
Смежные вопросы