2013-07-08 5 views
-2

Я все еще учусь, как делать с обработчиком событий.
Что я хочу: Когда я нажимаю на txtMonday, чтобы сфокусироваться, я нажимаю кнопку «Удалить», чтобы очистить выбранное текстовое поле.
Проблема: Когда я нажимаю кнопку «Удалить» для выбранного текстового поля, все невыделенные текстовые поля являются ясными. Я хочу удалить выбранное текстовое поле. Как решить эту проблему? Ваш пример кода очень ценится. Благодаря! Я использую WPF и C#.проблема с обработчиками событий textbox

private void btnRemoveClick(object sender, RoutedEventArgs e) 
    { 
     TextBox text = new TextBox(); 
     text.GotFocus += new RoutedEventHandler(txtMonday_GotFocus); 
      txtMonday.Clear(); 


     text.GotFocus += new RoutedEventHandler(txtTuesday_GotFocus); 
      txtTuesday.Clear(); 

    } 

    private void txtMonday_GotFocus(object sender, RoutedEventArgs e) 
    { 

    } 

    private void txtTuesday_GotFocus(object sender, RoutedEventArgs e) 
    { 

    } 
+0

wont this добавить обработчик событий много раз? – Jonesopolis

+0

Вы очень недопонимаете, как работают события и объекты. У вас много чтения. Ваша функция btnRemoveClick создает новое текстовое поле (не видно), добавляет событие для gotFocus, очищает текстовое поле в понедельник, снова добавляет одно и то же событие и очищает поле tuseday. передача обработчика событий очень странная вещь здесь. – Gray

ответ

3

Это должно делать то, что вы хотите. Я предлагаю вам еще немного изучить C#, хотя, как ваш код показывает некоторые фундаментальные недоразумения.

//you'll need a variable to store the last focused textbox. 
TextBox txtLast; 

public MainWindow() 
{ 
    InitializeComponent(); 
    //add an event for all the textboxes so that you can track when one of them gets focus. 
    txtSunday.GotFocus += txt_GotFocus; 
    txtMonday.GotFocus += txt_GotFocus; 
    txtTuesday.GotFocus += txt_GotFocus; 
    txtWednesday.GotFocus += txt_GotFocus; 
    txtThursday.GotFocus += txt_GotFocus; 
    txtFriday.GotFocus += txt_GotFocus; 
    txtSaturday.GotFocus += txt_GotFocus; 

    //default to clearing sunday to avoid exception 
    //you could also let it clear a new TextBox(), but this is wasteful. Ideally, 
    //you would handle this case gracefully with an if statement, but I will leave that 
    //as an exercise to the reader. 
    txtLast = txtSunday; 
} 

private void txt_GotFocus(object sender, RoutedEventArgs e) 
{ 
    //whenever you click a textbox, this event gets called. 
    //e.source is the textbox, but since it is is just an "Object" we need to cast it to a TextBox 
    txtLast = e.Source as TextBox; 
} 

private void Button_Click(object sender, RoutedEventArgs e) 
{ 
    //this will clear the textbox which last had focus. If you click a button, the current textbox loses focus. 
    txtLast.Clear(); 
} 
Смежные вопросы