2009-06-23 3 views
1

В моем случае у меня есть панели, но чтобы было ясно, я буду использовать кнопки в моем примере.Как правильно использовать «this» для доступа к элементам управления формы?

У меня есть 5 (или более) кнопок, и я установил событие, например, OnMouseHover, на все пять кнопок. Как я могу получить, на который наведен указатель мыши, если все события ссылаются на один метод

Чтобы захватить кнопку, где была наведена мышь, я попытался использовать «это», но она ссылается на форму.

private void buttonX_MouseHover(object sender, EventArgs e) 
    { 
     this.Text = "Test"; 
    } 

Я ожидал, что текст на указанной кнопке, где мышь парил, чтобы изменить его текст «Test», но это произошло только form.Text.

В моей реальной программе у меня есть 60 панелей, и я снова использую один метод для всех событий OnMouseHover на любом из них. Как получить панель (или кнопку в примере выше), где находится указатель мыши?

ответ

8

this всегда относится к экземпляру класса (форме). Вы должны бросить отправитель вместо:

((Control)sender).Text = "Test"; 

Отправитель (обычно) экземпляра повышение события - полезно при использовании того же обработчика из нескольких элементов управления.

+0

Спасибо, вы спасли мой день! У меня есть только один вопрос. Является ли «отправитель» во всех событиях, связанных с контролем? –

+1

@John: Да, он всегда связан с каким-либо экземпляром, который вызывает событие - в случае элементов управления это текущий элемент управления. –

+1

Однако, когда вы поднимаете события самостоятельно, вам необходимо выполнить соответствующий экземпляр ('this') вручную, так как это не обеспечивается компилятором. Наверное, это то, что Марк означает «вообще» в своем ответе. –

2

Это всегда класс, в данном случае - сама форма. Объект «отправитель» - это волшебное слово. Если это кнопка, нажмите ее. Поскольку объект является только ссылкой, вы можете внести изменения в отправляющий объект.

Смежные вопросы