Форум программистов, компьютерный форум, киберфорум
Наши страницы
C#: WPF, UWP и Silverlight
Войти
Регистрация
Восстановить пароль
 
V0fka
3 / 5 / 1
Регистрация: 24.05.2010
Сообщений: 248
#1

Как передать свой параметр в ToolStripItem.Click ? - C# WPF

21.10.2015, 15:05. Просмотров 342. Ответов 7
Метки нет (Все метки)

Привет!

В классе App есть коллекция

C#
1
private ObservableCollection<CommandItem> commands = new ObservableCollection<CommandItem>();
которая заполняется в событии Startup. В этом же событии далее по коду формируется иконка в трее с контекстным меню:

C#
1
2
3
4
5
6
System.Windows.Forms.ContextMenuStrip iconContextMenu = new System.Windows.Forms.ContextMenuStrip();
System.Windows.Forms.ToolStripItem item = iconContextMenu.Items.Add("Item");
item.Click += (object sender, EventArgs e) =>
{
   // тут мне надо как-то получить доступ к коллекции commands
}
При попытке в Click-е обратиться к commands - получаю: An object reference is required for the non-static field, method, or property

Почему оно так получается - вроде как понятно. Предполагаю, что для того, чтобы обратиться к этой коллекции - её нужно как-то дополнительно передать в параметрах события Click.
Вопрос: как передать?
0
Лучшие ответы (1)
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
21.10.2015, 15:05
Я подобрал для вас темы с готовыми решениями и ответами на вопрос Как передать свой параметр в ToolStripItem.Click ? (C# WPF):

Передать тип как параметр
Добрый день. Как передать тип как параметр вот метод dynamic get_Par(int ipa,...

Как передать параметр потоку?
Добрый день, возник вопрос как передать параметр потоку, нужно чтобы каждый...

Передать метод как параметр и вызвать его
Доброго времени суток. Делаю XNA проект. Создаю игровое меню с кнопками. Меню -...

[WPF] Передать параметр в ICommand
Добрый день. Делаю проект wpf - mvvm. Из главного окна требуется вызвать...

Передать параметр через Binding
На кнопке записан контент единица, как передать, что кнопка с единицей и...

Необходимо передать параметр в какой-либо обработчик сообщений, например button1_Click
Ребята, я уже весь мозг сломал. Я не буду сюда выкладывать, чё я нарыл- кому...

7
amarf
Жуткая тВарЬ
381 / 317 / 133
Регистрация: 06.02.2015
Сообщений: 959
Записей в блоге: 1
Завершенные тесты: 3
21.10.2015, 17:37 #2
Лучший ответ Сообщение было отмечено V0fka как решение

Решение

Ваш код не полон, по нему сложно точно определить причину, покажите класс App полностью ибо такое чувство, что вы хотите обратится к полю объекта из статического метода
1
V0fka
3 / 5 / 1
Регистрация: 24.05.2010
Сообщений: 248
21.10.2015, 17:50  [ТС] #3
amarf, точно, спасибо!

Добавил в классе App метод:

C#
1
2
3
4
private void ItemClick(object sender, EventArgs e)
{
 
}
И в Click-е присвоил его:

C#
1
item.Click += ItemClick;
Теперь доступ есть . Или это костыль?

Я просто думал, что лямбда выражение будет выполняться как бы внутри объекта (т.е. будет связано с экземпляром объекта), а оно по ходу выполняется, как статический метод.
0
amarf
Жуткая тВарЬ
381 / 317 / 133
Регистрация: 06.02.2015
Сообщений: 959
Записей в блоге: 1
Завершенные тесты: 3
21.10.2015, 18:20 #4
V0fka, ну как сказать, лямда должна нормально работать по этому ваша проблема в чем-то другом. Во вторых в wpf. не особо принято использовать обработчик для кнопок, но это не правило, а скорее рекомендация. В третьих в Application не должна находиться логика такого уровня, одним словом кнопкам там не место.
0
V0fka
3 / 5 / 1
Регистрация: 24.05.2010
Сообщений: 248
22.10.2015, 10:43  [ТС] #5
Цитата Сообщение от amarf Посмотреть сообщение
Во вторых в wpf. не особо принято использовать обработчик для кнопок, но это не правило, а скорее рекомендация
Нужно (в идеальном мире) использовать команды?

Цитата Сообщение от amarf Посмотреть сообщение
В третьих в Application не должна находиться логика такого уровня, одним словом кнопкам там не место.
Приложение при запуске должно создать иконку в трее (NotifyIcon) и далее все действия уже обрабатываются ей (клик по ней, контекстное меню оттуда же). И все это сейчас происходит в классе App. В нем же содержится та самая коллекция commands. Пихнул её туда я потому, что мне нужно к ней добраться при выборе некоторых пунктов из контекстного меню и как это сделать как-то по другому - фиг его знает. Если подскажете более правильный подход - буду благодарен.
0
Ev_Hyper
Заблокирован
22.10.2015, 10:50 #6
Цитата Сообщение от V0fka Посмотреть сообщение
Нужно (в идеальном мире) использовать команды?
V0fka, да.
1
amarf
Жуткая тВарЬ
381 / 317 / 133
Регистрация: 06.02.2015
Сообщений: 959
Записей в блоге: 1
Завершенные тесты: 3
22.10.2015, 12:39 #7
Цитата Сообщение от V0fka Посмотреть сообщение
Приложение при запуске должно создать иконку в трее
Так вынесете эту логику в отдельную часть приложения, а в App управляйте этой частью +) Нет ни чего страшного что вы логику реализуете в самом верхне уровне приложения, но так как правило решаются глобальные проблемы а не то каким будет значек трея и что произойдет при его нажатии +)...

Это все рекомендации так что следовать им или нет это Ваше решение....
1
V0fka
3 / 5 / 1
Регистрация: 24.05.2010
Сообщений: 248
23.10.2015, 10:45  [ТС] #8
Ev_Hyper, amarf, спасибо за ответы!

Как передать свой параметр в ToolStripItem.Click ?
2
23.10.2015, 10:45
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
23.10.2015, 10:45
Привет! Вот еще темы с решениями:

Как дождаться завершения IHtmlElement::Click() C#
Появилась следующая проблемка: Загружаю в WebBrowser страничку, заполняю в ней...

Элемент Label, поддерживающий событие Click как у Button
У меня возник вопрос: как реализовать метку (типа Label), но поддерживающую...

Как получить координаты button в котором произошло событие Click
Здравствуйте! Если кто знает, подскажите пожалуйста как получить координаты...

Интерфейсы ошибка тип long не может быть использован как как параметр типа T
Добрый день. Есть интерфейсы и классы, которые их реализуют. using...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
8
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru