функция, чтобы получить экземпляр формы - PullRequest
4 голосов
/ 04 августа 2011

Я хочу построить функцию, которая возвращает мне уже существующий экземпляр формы.

fx = getForm(Form1);

здесь я получаю сообщение об ошибке «FensterTest.Form1» является «типом», но используется как «переменная» Так что мне нужен кастинг, но я не знаю, что мне нужно кастовать.

private Form getForm(Form f)
{
  foreach (Form a in Application.OpenForms)
  {
    if (a is f)
    {
      f fx = (f)a;
      return fx;
    }
  }
  return null;
}

и везде, где я использую "f", я получаю "тип или имя пространства имен 'f' не найдено"

"f fx = (f) a;" раньше был "Form1 fx = (Form1) a;" и это работало довольно хорошо, но так как мне также нужно использовать Form2 Form3, ...

1 Ответ

5 голосов
/ 04 августа 2011

Возможно, вы хотите найти Form из коллекции OpenForms указанного типа.Поэтому вам нужно передать тип - вы можете либо передать объект Type, либо вы можете сделать метод универсальным, чтобы вы могли передать параметр типа.Отправка в параметре типа имеет то преимущество, что вы можете быть безопасными по типу (возвращая конкретный тип, который вы искали, в случае, если он вам нужен).Вот общее решение:

private TForm getForm<TForm>()
    where TForm : Form
{
    return (TForm)Application.OpenForms.OfType<TForm>().FirstOrDefault();
}

Примечание, OfType и FirstOrDefault - это методы расширения LINQ, убедитесь, что вы импортируете System.Linq.Используйте метод выше, как это:

Form f = getForm<Form1>();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...