Принятие элементов формы в качестве аргументов метода? - PullRequest
5 голосов
/ 11 февраля 2011

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

static public void PrintFormElement(object element, ?type?){

}

Правильно ли я подхожу к этой проблеме? Любой совет будет оценен спасибо!

Ответы [ 4 ]

4 голосов
/ 11 февраля 2011

Вы можете узнать, к какому типу что-либо относится либо оператор * is/as, либо GetType.Это обычно немного дизайнерского запаха, если вы должны использовать их, хотя.Что вы планируете делать в зависимости от типа?

Если вы говорите о визуальных элементах, вы можете использовать Control вместо object.

3 голосов
/ 11 февраля 2011

Я думаю, что ваш element должен быть Control, и каждый Control имеет DrawToBitmap() метод, который вы можете использовать, чтобы сделать его «скриншот».

Таким образом, вы можете забыть все о параметре типа, потому что он вам не понадобится из-за полиморфизма .

1 голос
/ 11 февраля 2011

Расширить ответы, предлагающие использовать базовый класс Control. Я бы сделал вашу функцию методом расширения, чтобы избежать создания ASDFHelper, ASDFUtility и других классов, полных статических методов.

static public void PrintFormElement(this Control element){
    element.DrawToBitmap();
}

Это может быть вызвано так

new TextBox().PrintFormElement();
1 голос
/ 11 февраля 2011

Я думаю, object слишком универсально, я бы вместо этого выбрал Control . Вам не нужно передавать тип, вы можете просто запросить его для типа, используя is.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...