Принятие элементов формы в качестве аргументов метода?

Я пишу метод, который сделает скриншот переданного элемента формы и распечатает его. Есть несколько проблем, с которыми я сталкиваюсь. Я хочу иметь возможность сделать этот метод достаточно универсальным, чтобы принимать практически любой тип элемента формы. Я установил аргумент "элемент" для типа "объект". Я думаю, что мне также нужно будет передать аргумент типа или есть способ выяснить, какого типа объект после его передачи?

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();
Другие вопросы по тегам