Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Общие вопросы по .NET и C# > Игра пятнашки...


Автор: Coocky 6.4.2005, 12:35
Задали(как и год назад по МФС) написать пятнашки smile mr_DUDA не бей!!!!! smile
Обьясните в пару строк,как написать обработчик для 14 кнопок.Ведь ON_COMMAND_RANGE уже не спасет.. smile
Заранее благодарен.

Автор: mr.DUDA 6.4.2005, 12:46
Добавляешь на форму 15 кнопок, для каждой из них добавляешь обработчик события Click с ОДНИМ именем, например OnButtonClicked. Обработчик будет использовать sender для определения, какая кнопка нажата:
Цитата
private void OnSomeButtonClicked(object sender, System.EventArgs e)
{
    MessageBox.Show(this, "Нажата кнопка: " + ((Button)sender).Text);
}


Пример формы с 15-ю кнопками и одним общим обработчиком - в файле:

Автор: Coocky 6.4.2005, 16:53
М-дя....Тяжело переходить...
Код

(this, "Нажата кнопка: " + ((Button)sender).Text);

Вот это совсем убило..

Автор: mr.DUDA 6.4.2005, 17:13
Цитата(Coocky @ 6.4.2005, 16:53)
М-дя....Тяжело переходить...
Код

(this, "Нажата кнопка: " + ((Button)sender).Text);

Вот это совсем убило..

В упор не вижу, что тебя "убило" smile

Наверное, так привык к шарпу, что исходники (свои и чужие) читаются бегло. Ничто, как говорится, не режет глаз (хотя сначала тоже было тяжеловато smile)...

Автор: neutrino 6.4.2005, 18:16
А какая разница между
Код

((Button)sender).Text


и

Код

(sender as Button).Text

Автор: mr.DUDA 6.4.2005, 18:31
И в первом и во втором примере показано, как преобразовать объект sender к Button. В случае, если sender содержит объект производный от Button, разницы между примерами - никакой.

Различия проявятся только если sender не является объектом Button. В первом примере возникнет исключение InvalidCastException, а во втором примере выражение "sender as Button" даст null, в результате при обращении через точку к свойству Text возникнет исключение NullReferenceException.

Кстати, в мсдн оператор as раскрывается как:
Цитата
expression as type

is equivalent to:

expression is type ? (type)expression : (type)null

И ещё, оператор as игнорирует пользовательские операции преобразования, определённые в классе.

Модератор: Да, и убедительно прошу задавать вопросы каждый в отдельном топике, чтобы народ смог тоже посмотреть на ответы.

Автор: [Last]Wizard 6.4.2005, 18:44
Цитата(neutrino @ 6.4.2005, 17:16)
А какая разница между ...


А разница в том, что если sender - не есть Button, то в первом случае бросится InvalidCastException, а во втором NullReferenceException (так как sender as Button в этом случае будет равно null)

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)