Какой общий предок визуальных элементов в C #? - PullRequest
0 голосов
/ 01 сентября 2010

Мне трудно поверить, что здесь нет ответа, но, похоже, его не существует.

Я пытаюсь перебрать все в форме и установить видимые и включенные свойства на основе значения тега. Я нахожу запах абсолютно дублированной подпрограммы между подпрограммой, повторяющей элементы управления, и подпрограммой, повторяющей меню - хотя оба класса имеют свойства visible, enabled и tag, они кажутся отдельными элементами.

Насколько я могу судить, дерево сходится только в Компоненте - но ему не хватает визуальных свойств.

Ответы [ 2 ]

2 голосов
/ 01 сентября 2010

Это верно, общего предка нет.Класс ToolStripMenuItem является производным от ToolStripItem, базового класса для многих производных классов, являющихся частью MenuStrip или ToolStrip.Они особенные, потому что они не являются производными от контроля.Это безоконные элементы управления, у них нет свойства Handle.Что является ключевым свойством базового класса Control.

Это оптимизация, производные от Control классы дороги.Им нужно собственное окно Windows, тяжелый объект операционной системы с большим количеством накладных расходов.Действительно заметно, когда вы помещаете, скажем, 50 кнопок на форму.Вы можете видеть это краской.

Дублирование этой логики, таким образом, нормально.Использование свойства Tag для управления состоянием не.

0 голосов
/ 03 апреля 2019

Нет общего предка, однако вы можете обойти это, используя тип dynamic.Например:

object control = new Button() { Tag = "Whatever" };
object menuItem = new ToolStripMenuItem { Tag = "Something else" };
object tag1 = (control as dynamic).Tag;
object tag2 = (menuItem as dynamic).Tag;
// Do something with tag1 and tag2
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...