2015-09-21 3 views
4

У меня есть 2 проблемы:Какая кнопка называется этой формой?

  1. "Какая кнопка называется эта форма?" (Короткая версия)

  2. Я не могу коснуться кнопки или формы баттона

Почему я хочу этого?

У меня есть много форм и нужно знать, как пользователь туда попал. Если бы я мог получить форму (а не кнопку), она также может решить проблему.

Длинная версия: Мне нужно скопировать некоторые свойства исходной формы/кнопок на новый без делать это вручную, и я намерен использовать его в дальнейшей отчетности Exception, чтобы поймать больше информации

Изначально я пытался сделать «newForm.Caller = this;» на каждой кнопке, но есть 200+ форм и множество кнопок на каждом.

Все формы и его кнопки являются настраиваемыми элементами управления, поэтому я могу делать что-то там.

Пробовал вещи

  • Я пытался сделать что-то с StackFrames и отражения в виде конструктора, но не работают (889310)

  • Я нашел это 10401190 для JAVA, но это может» t help

  • Я думал, что могу использовать переопределение OnClick для хранения последнего экземпляра кнопки в статическом месте в кнопках/формах класс, то получим его в конструкторе формы, но, по-видимому, это худшее решение. (Многие вещи, открытые формы и виновник будет последняя кнопка нажата)

  • Проблема еще хуже, когда другие вещи, открытые формы и я потерял ссылку (DataGridVewButton, таймеры, связанные этикетки, ...)


EDIT1: (oɔɯǝɹ) Другая деталь, формы могут быть вызваны из внешних плагинов. Поэтому снова у меня нет недостатков в коде, чтобы изменить его.


EDIT2: Пример (Грэхэм Bass, ShreyasKapur) FormA имеет ButtonA, что при нажатии на шоу FormB FormA наследует FormBase Button наследует ButtonBase FormB наследует FormBase

Я не могу изменить Forma ни ButtonA коды , только FormBase и ButtonBase коды


Edit3: (Брэдли Uffner) ShowDialog() формы имеют свойство владельца, которое решает часть проблемы. Спасибо Брэдли, я забыл об этом! К сожалению, весь существующий код использует конструктор без параметров. «Отображает эту форму как модальное диалоговое окно, без владельца окна» (1)

+0

Это похоже на случай обмена сообщениями. Вы используете рамки? –

+0

@ graham-bass Я не. – Rafael

+0

Как я понимаю, в кнопке OnClick может произойти что угодно, а также Form.Show()? И ShowDialog() тоже? Также создание формы может быть в OnClick, а не в тоже? – Spawn

ответ

2

Я думаю, что вы пытаетесь решить проблему неправильно.

Когда ваши формы взаимосвязаны, вы соединяете их плотно. Соединив их еще сильнее, оглядываясь на того, кто вас зовет, вы только делаете проблему хуже. См. Также: инструкция comefrom.

Я бы предложил передать параметры между вашими формами, чтобы предоставить им нужные им данные. Но сохраните количество параметров до абсолютного минимума и не пытайтесь использовать что-то вроде caller, что было бы обманом.

+0

Я вас понимаю, но есть много кода для обновления, и мне не разрешено изменять его. (Вторая проблема) – Rafael

+2

Когда я в дыру, я предлагаю прекратить копать глубже (или, по крайней мере, не быстрее). Но так как я не в дыре, что я знаю :-) –

Смежные вопросы