Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > .NET Frameworks (точка нет фреймворки) > Windows Forms
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 20.01.2012, 22:59   #1
РагнаР
Пользователь
 
Регистрация: 19.10.2010
Сообщений: 25
По умолчанию Отлов клика мыши по panel

Есть panel( wrappanel) c добавленными программно на нее кнопками. Каким образом можно отловить клик мышью по кнопке, то есть определить , по какой именно кнопке из wrappanel произошел клик? Проект на wpf
РагнаР вне форума Ответить с цитированием
Старый 20.01.2012, 23:39   #2
Luuzuk
Форумчанин
 
Аватар для Luuzuk
 
Регистрация: 18.01.2012
Сообщений: 975
По умолчанию

1 вариант: повесить на каждую кнопку обработчик Click(). Либо свой для каждой, либо в обработчике проверять объект sender.
XAML:
Код:
        <WrapPanel>
            <Button Content="111" Click="Button_Click" />
            <Button Content="222" Click="Button_Click" />
        </WrapPanel>
Code behind:
Код:
private void Button_Click(object sender, RoutedEventArgs e)
{
  //do something
}
2 вариант: каждой кнопке в Command прописать биндинг на команду (проперти, реализующее интерфейс ICommand в DataContext). Либо для каждой кнопки свою команду создать, либо одну для всех, а для идентификации прописать CommandParameter, уникальный для каждой кнопки
XAML:
Код:
        <WrapPanel>
            <Button Content="111" Command="{Binding SomeCommand}" CommandParameter="btn1"/>
            <Button Content="222" Command="{Binding SomeCommand}" CommandParameter="btn2"/>
        </WrapPanel>
DataContext:
Код:
        public ICommand SomeCommand { get; protected set; }

        public DataContextClass()
        {
            ...
            SomeCommand = new DelegateCommand<object>(DoSomeCommand);
            ...
        }

        private void DoSomeCommand(object param)
        {
            // do something
        }
P.S. использован DelegateCommand<> из призмы
P.P.S. для созданных программно кнопок:

Код:
newButton.Click +=Button_Click;
Либо
Код:
newButton.SetBinding(ButtonBase.CommandProperty, new Binding("SomeCommand"));
newButton.CommandParameter = string.Format("btn{0}",buttonIndex);
Благодарить в репутацию. Проклинать — туда же

Последний раз редактировалось Luuzuk; 20.01.2012 в 23:47.
Luuzuk вне форума Ответить с цитированием
Старый 20.01.2012, 23:48   #3
РагнаР
Пользователь
 
Регистрация: 19.10.2010
Сообщений: 25
По умолчанию

Кнопки добавляются программно, их количество задается отдельно, поэтому я не могу задать обработчик для конкретно заданной кнопки.
РагнаР вне форума Ответить с цитированием
Старый 20.01.2012, 23:49   #4
Luuzuk
Форумчанин
 
Аватар для Luuzuk
 
Регистрация: 18.01.2012
Сообщений: 975
По умолчанию

Я отредактировал свой предыдщий пост, слово "программно" упустил
Если выберете вариант 1, то кнопкам придется для идентификации задать Tag или Name например (потом смотреть на нужное свойство sender'a). Когда кнопки перестанут быть нужными, то отписать каждую от "Button_Click" (someButton.Click -= Button_Click), иначе возможна утечка памяти
Благодарить в репутацию. Проклинать — туда же

Последний раз редактировалось Luuzuk; 20.01.2012 в 23:51.
Luuzuk вне форума Ответить с цитированием
Старый 21.01.2012, 23:08   #5
РагнаР
Пользователь
 
Регистрация: 19.10.2010
Сообщений: 25
По умолчанию

Решилось следующим способом:
событие PreviewMouseLeftButtonDown , кнопка определяется, как e.Source;
РагнаР вне форума Ответить с цитированием
Старый 21.01.2012, 23:12   #6
Luuzuk
Форумчанин
 
Аватар для Luuzuk
 
Регистрация: 18.01.2012
Сообщений: 975
По умолчанию

Ну если учитывать варианты типа "выделили какую-то кнопку клавишей TAB и нажали пробел" в вашу задачу не входит, то можно и так. Но решение не особо надёжное
Благодарить в репутацию. Проклинать — туда же
Luuzuk вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Отлов сигналов от мыши и клавы Ramirag Win Api 0 02.11.2011 19:41
Имитация клика мыши Anfall Общие вопросы Delphi 20 05.10.2010 09:15
Отлов клика по компоненту WebBrowser Alex Cones Общие вопросы Delphi 3 31.05.2010 08:42
Эмуляция клика мыши Stimer Win Api 1 05.02.2009 04:06
Отлов кликов мыши LAFUDR Помощь студентам 9 24.05.2008 01:32