Использование оператора IS для определения типа формы - PullRequest
3 голосов
/ 07 февраля 2012

Я хотел бы написать общий метод, который бы проверял, открыта ли уже форма.Если он открыт, просто активируйте его.Иначе покажи это.Теперь моя проблема в том, какой тип параметра мне передать в метод Test?

private void Test(?? ??)
        {
            bool isFormOpen = false;
            foreach (Form form in Application.OpenForms)
            {
                if (form is ??)
                {
                    isFormOpen = true;
                    form.Activate();
                }
            }
            if (!isFormOpen)
            {

            }
        }

Спасибо, Нишант

Ответы [ 5 ]

7 голосов
/ 07 февраля 2012

Поскольку вы в основном передаете тип, вы можете сделать метод универсальным:

private void ActivateIfOpen<T>() 
{ 
    foreach (Form form in Application.OpenForms) 
    { 
        bool isFormOpen = false; 
        if (form is T)
        {
            isFormOpen = true; 
            form.Activate(); 
        }
    } 
    ...
}

// call like this
ActivateIfOpen<MyMainForm>();
4 голосов
/ 07 февраля 2012

Вы можете использовать общий метод, например, такой:

private static void Test<T>()
    where T : Form
{
    foreach (Form f in Application.OpenForms)
    {
        if (f is T)
        {
        }
    }
}

или вы можете вставить тип формы в метод

private static void Test(Type formType)
{
    foreach (Form f in Application.OpenForms)
    {
        if (f.GetType() == formType)
        {
        }
    }
}

Другое дело, что Application.OpenForms такжеимеет параметр index[string name].Поэтому, если вы не хотите использовать тип для идентификации формы, вы также можете идентифицировать ее по имени, используя: Application.OpenForms["myFormName"]

4 голосов
/ 07 февраля 2012

Я бы пошел с чем-то вроде

    private void Test<TForm>()
       where TForm : Form
    {
        TForm form = Application.OpenForms.OfType<TForm>().SingleOrDefault();
        if (form != null)
        {

        }
     }
1 голос
/ 07 февраля 2012

при написании кода вам нужно передать Type соответствующего класса формы ...

           if (form.GetType() == theTypeParam)
            {
                isFormOpen = true;
                form.Activate();
            }

Альтернативой является использование generice - см. ответ от Хайнци за это.

0 голосов
/ 07 февраля 2012

В обоих решениях результат состоит в том, что если имеется несколько окон одного и того же класса, все эти окна открываются.

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