Принятие элементов формы в качестве аргументов метода?
Я пишу метод, который сделает скриншот переданного элемента формы и распечатает его. Есть несколько проблем, с которыми я сталкиваюсь. Я хочу иметь возможность сделать этот метод достаточно универсальным, чтобы принимать практически любой тип элемента формы. Я установил аргумент "элемент" для типа "объект". Я думаю, что мне также нужно будет передать аргумент типа или есть способ выяснить, какого типа объект после его передачи?
static public void PrintFormElement(object element, ?type?){
}
Правильно ли я подхожу к этой проблеме? Любой совет будет оценен спасибо!
4 ответа
Я думаю, что ваш element
должно быть Control
и каждый Control
имеет DrawToBitmap()
метод, который вы можете использовать, чтобы сделать "скриншот".
Таким образом, вы можете забыть все о параметре типа, потому что он вам не понадобится из-за полиморфизма.
Вы можете узнать, что типа что-то либо с помощью is/as
операторы, или используя GetType
, Это обычно немного дизайнерский запах, если вы должны их использовать, хотя. Что вы планируете делать, это зависит от типа?
Если вы говорите о визуальных элементах, вы можете использовать Control
вместо object
,
Я думаю object
слишком общий, я бы вместо этого пошел на контроль. Вам не нужно передавать тип, вы можете просто запросить его для типа, используя is
,
Развернуть ответы, предлагающие использовать базовый класс Control. Я бы сделал вашу функцию методом расширения, чтобы избежать создания ASDFHelper, ASDFUtility и других классов, полных статических методов.
static public void PrintFormElement(this Control element){
element.DrawToBitmap();
}
Это может быть вызвано следующим образом
new TextBox().PrintFormElement();