Re[2]: [C#, RoutedEventHandler]
От: xvost Германия http://www.jetbrains.com/company/people/Pasynkov_Eugene.html
Дата: 27.01.12 20:17
Оценка: +1
Здравствуйте, Vaako, Вы писали:

V> // обращение к свойству btn ..

V> Button btn = sender as Button;


Только, конечно же,

Button btn = (Button) sender;


Используя оператор 'as' ты подразумеваешь что там может оказаться и не Button. В случае каста ты явно декларируешь предусловие
С уважением, Евгений
JetBrains, Inc. "Develop with pleasure!"
[C#, RoutedEventHandler]
От: Mercury-Shine Украина  
Дата: 27.01.12 17:25
Оценка:
Здравствуйте,
есть функция funk(), которая создает кнопку
void funk()
{
    Button btn = new Button()
    btn.Click += new RoutedEventHandler(ButtonBtn_Click);
}

void ButtonBtn_Click(object sender, RoutedEventArgs e)
        {
                    // обращение к свойству btn .. 
        }

Как обратится к какому-нибудь свойству btn, например к Height?
... << RSDN@Home 1.2.0 alpha 5 rev. 1539>>
Re: [C#, RoutedEventHandler]
От: Vaako Украина  
Дата: 27.01.12 17:40
Оценка:
Здравствуйте, Mercury-Shine, Вы писали:

MS>Здравствуйте,

MS>есть функция funk(), которая создает кнопку
MS>
MS>void funk()
MS>{
MS>    Button btn = new Button()
MS>    btn.Click += new RoutedEventHandler(ButtonBtn_Click);
MS>}

MS>void ButtonBtn_Click(object sender, RoutedEventArgs e)
MS>        {
MS>                    // обращение к свойству btn .. 
MS>        }
MS>

MS>Как обратится к какому-нибудь свойству btn, например к Height?

void ButtonBtn_Click(object sender, RoutedEventArgs e)
{
// обращение к свойству btn ..
Button btn = sender as Button;
...
}
Re: [C#, RoutedEventHandler]
От: Mercury-Shine Украина  
Дата: 27.01.12 17:43
Оценка:
Нашел ответ на MSDN
Button srcButton = e.Source as Button;
            srcButton.Width = 200;
... << RSDN@Home 1.2.0 alpha 5 rev. 1539>>
Re[2]: [C#, RoutedEventHandler]
От: Mercury-Shine Украина  
Дата: 27.01.12 17:44
Оценка:
Здравствуйте, Vaako, Вы писали:

V>Здравствуйте, Mercury-Shine, Вы писали:


MS>>Здравствуйте,


V>void ButtonBtn_Click(object sender, RoutedEventArgs e)

V> {
V> // обращение к свойству btn ..
V> Button btn = sender as Button;
V> ...
V> }
Спасибо
... << RSDN@Home 1.2.0 alpha 5 rev. 1539>>
Re[3]: [C#, RoutedEventHandler]
От: Vaako Украина  
Дата: 28.01.12 18:55
Оценка:
Здравствуйте, xvost, Вы писали:

X>Здравствуйте, Vaako, Вы писали:


V>> // обращение к свойству btn ..

V>> Button btn = sender as Button;


X>Только, конечно же,


X>
X>Button btn = (Button) sender;
X>


X>Используя оператор 'as' ты подразумеваешь что там может оказаться и не Button. В случае каста ты явно декларируешь предусловие


ну так потом надо
if(btn != null)
{
btn.Width = 200;
}

в случае (Button) sender; разве null возвращается?
Re[4]: [C#, RoutedEventHandler]
От: MxMsk Португалия  
Дата: 28.01.12 19:16
Оценка:
Здравствуйте, Vaako, Вы писали:

V>ну так потом надо

V>if(btn != null)
V>{
V> btn.Width = 200;
V>}
Разве это хорошо, что ожидается объект Button, а на вход пришло нечто другое?
Re[7]: [C#, RoutedEventHandler]
От: Vaako Украина  
Дата: 29.01.12 11:16
Оценка:
Здравствуйте, Nikolay_P_I, Вы писали:

N_P>А это потому что вы неправильный вопрос решаете. Нет в реальности задачи "установить ширину кнопки". Есть задача "установить ширину конкретной кнопки". Ну или "конкретных кнопок". И решается для 1 кнопки "в лоб".

N_P>
N_P>if ((sender==button1)&(button1!=null))
N_P>{
N_P>Button btn = (Button)sender;
N_P>btn.Width = 200;
N_P>}
N_P>

N_P> Для кучи кнопок смотреть if(sender is MyButtonClass) и ((Control)sender).Tag

Да это не я решаю, я бы для одной кнопки просто записал

void ButtonBtn_Click(object sender, RoutedEventArgs e)
{
  button1.Width = 200;
}


Я задумался в каких случаях следует писать
(1)
(Button)sender


а в каких
(2)
(sender as Button)


Просто иногда вызываю программно
ButtonBtn_Click(this, null);

и sender может оказаться совсем не Button.
потому мне кажется второй вариант с последующим сравнением с null более универсален, а первый накладывает больше ограничений при вызове.
Особенно когда программировать лень и в обработчике выполняется некоторая функциональность из-за чего руки так и чешутся вызывать обработчик программно

Хотя это немного надуманно и мое предпочтение перед вторым вариантом наверно просто дело привычки.
Красивее выглядит
(sender as Button).Width = 200;

чем
((Button)sender).Width = 200;

Хотя тут в обоих случаях надо быть полностью уверенным что (sender is Button) == true
Re[5]: [C#, RoutedEventHandler]
От: Vaako Украина  
Дата: 29.01.12 12:02
Оценка:
Здравствуйте, MxMsk, Вы писали:

MM>Здравствуйте, Vaako, Вы писали:


V>>ну так потом надо

V>>if(btn != null)
V>>{
V>> btn.Width = 200;
V>>}
MM>Разве это хорошо, что ожидается объект Button, а на вход пришло нечто другое?

Да не хорошо.
Re[6]: [C#, RoutedEventHandler]
От: Nikolay_P_I  
Дата: 29.01.12 12:07
Оценка:
Здравствуйте, Vaako, Вы писали:

V>>>ну так потом надо

V>>>if(btn != null)
V>>>{
V>>> btn.Width = 200;
V>>>}
MM>>Разве это хорошо, что ожидается объект Button, а на вход пришло нечто другое?

V>Да не хорошо.


А это потому что вы неправильный вопрос решаете. Нет в реальности задачи "установить ширину кнопки". Есть задача "установить ширину конкретной кнопки". Ну или "конкретных кнопок". И решается для 1 кнопки "в лоб".
if ((sender==button1)&(button1!=null))
{
Button btn = (Button)sender;
btn.Width = 200;
}

Для кучи кнопок смотреть if(sender is MyButtonClass) и ((Control)sender).Tag
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.