Форум программистов, компьютерный форум, киберфорум
Наши страницы

C#: WPF, UWP и Silverlight

Войти
Регистрация
Восстановить пароль
 
V0fka
3 / 3 / 0
Регистрация: 24.05.2010
Сообщений: 138
#1

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

21.10.2015, 15:05. Просмотров 310. Ответов 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):

Передать тип как параметр - C#
Добрый день. Как передать тип как параметр вот метод dynamic get_Par(int ipa, int subI, short type); В VB parVal = prot.Par(...

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

.NET 4.x Передать метод как параметр и вызвать его - C#
Доброго времени суток. Делаю XNA проект. Создаю игровое меню с кнопками. Меню - это класс, в который передаю список кнопок. В классе Меню...

Передать параметр через Binding - C# WPF
На кнопке записан контент единица, как передать, что кнопка с единицей и передать единицу через биндинг

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

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

7
amarf
Жуткая тВарЬ
374 / 310 / 118
Регистрация: 06.02.2015
Сообщений: 941
Записей в блоге: 1
Завершенные тесты: 3
21.10.2015, 17:37 #2
Лучший ответ Сообщение было отмечено автором темы, экспертом или модератором как ответ
Ваш код не полон, по нему сложно точно определить причину, покажите класс App полностью ибо такое чувство, что вы хотите обратится к полю объекта из статического метода
1
V0fka
3 / 3 / 0
Регистрация: 24.05.2010
Сообщений: 138
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
Жуткая тВарЬ
374 / 310 / 118
Регистрация: 06.02.2015
Сообщений: 941
Записей в блоге: 1
Завершенные тесты: 3
21.10.2015, 18:20 #4
V0fka, ну как сказать, лямда должна нормально работать по этому ваша проблема в чем-то другом. Во вторых в wpf. не особо принято использовать обработчик для кнопок, но это не правило, а скорее рекомендация. В третьих в Application не должна находиться логика такого уровня, одним словом кнопкам там не место.
0
V0fka
3 / 3 / 0
Регистрация: 24.05.2010
Сообщений: 138
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
Жуткая тВарЬ
374 / 310 / 118
Регистрация: 06.02.2015
Сообщений: 941
Записей в блоге: 1
Завершенные тесты: 3
22.10.2015, 12:39 #7
Цитата Сообщение от V0fka Посмотреть сообщение
Приложение при запуске должно создать иконку в трее
Так вынесете эту логику в отдельную часть приложения, а в App управляйте этой частью +) Нет ни чего страшного что вы логику реализуете в самом верхне уровне приложения, но так как правило решаются глобальные проблемы а не то каким будет значек трея и что произойдет при его нажатии +)...

Это все рекомендации так что следовать им или нет это Ваше решение....
1
V0fka
3 / 3 / 0
Регистрация: 24.05.2010
Сообщений: 138
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# - C#
Появилась следующая проблемка: Загружаю в WebBrowser страничку, заполняю в ней поля логина и пароля, нажимаю логин с помощью метода...

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

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

Поле как параметр - C#
Доброго времени суток! На днях стыкнулся с следующей проблемой: Есть класс (Допустим название А) public class A { public...


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

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

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