Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / WinForms, .Net Framework Новый топик    Ответить
 Как проверить, открыта ли форма?  [new]
aartem
Member [заблокирован]

Откуда: Москва/Moscow/MOW
Сообщений: 116
Для того, чтобы пользователь не смог открыть еще одну такуюже форму,
делаю проверку еперд открытием:

            if (frmProg != null)
            {

                frmProg f = new frmProg();
                f.MdiParent = this;
                f.Show();
            }
            else ;
(Это я так привык в BCB6 делать).
Выскакивает ошибка:
"ASU.frmProg" является "тип", но используется как "переменная"
Че делать?
Вот за это я недолюбливаю C#, что тут простые вещи надо окольными путями делать.
30 авг 09, 16:05    [7594832]     Ответить | Цитировать Сообщить модератору
 Re: Как проверить, открыта ли форма?  [new]
aleks-sam
Member

Откуда: Krasnoyarsk
Сообщений: 1852
список чайлдов
30 авг 09, 16:17    [7594838]     Ответить | Цитировать Сообщить модератору
 Re: Как проверить, открыта ли форма?  [new]
aartem
Member [заблокирован]

Откуда: Москва/Moscow/MOW
Сообщений: 116
aleks-sam,

а если это будет не в случае с mdi-формой???

в BCB6 было проще... там просто смотрелось форма нулл или нет...
а тут как это сделать?
30 авг 09, 16:25    [7594849]     Ответить | Цитировать Сообщить модератору
 Re: Как проверить, открыта ли форма?  [new]
aleks-sam
Member

Откуда: Krasnoyarsk
Сообщений: 1852
Ну как вариант хранить список имен форм (List<string>)
При создании новой, смотреть нет ли уже в этом списке.
ИМХО криво как то :)
30 авг 09, 16:35    [7594861]     Ответить | Цитировать Сообщить модератору
 Re: Как проверить, открыта ли форма?  [new]
aleks-sam
Member

Откуда: Krasnoyarsk
Сообщений: 1852
Application.OpenForms
30 авг 09, 16:42    [7594873]     Ответить | Цитировать Сообщить модератору
 Re: Как проверить, открыта ли форма?  [new]
aartem
Member [заблокирован]

Откуда: Москва/Moscow/MOW
Сообщений: 116
aleks-sam,

не будет ли наглостью, если я у Вас попрошу кусок рабочего кода?
30 авг 09, 16:46    [7594877]     Ответить | Цитировать Сообщить модератору
 Re: Как проверить, открыта ли форма?  [new]
aleks-sam
Member

Откуда: Krasnoyarsk
Сообщений: 1852
namespace WindowsFormsApplication5
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        private void button1_Click(object sender, EventArgs e)
        {
            // Попытаемся открыть форму с именем Form1
            foreach(Form f in Application.OpenForms)
            {
                if (f.Name == "Form1")
                {
                    MessageBox.Show("Уже открыта");
                    return;
                }
            }
            Form f1 = new Form();
            f1.Show();
        }
    }
}
30 авг 09, 16:56    [7594889]     Ответить | Цитировать Сообщить модератору
 Re: Как проверить, открыта ли форма?  [new]
aartem
Member [заблокирован]

Откуда: Москва/Moscow/MOW
Сообщений: 116
aleks-sam,

Спасибо!
30 авг 09, 17:01    [7594893]     Ответить | Цитировать Сообщить модератору
 Re: Как проверить, открыта ли форма?  [new]
winsky!
Member

Откуда: Киев
Сообщений: 5116
aleks-sam
namespace WindowsFormsApplication5
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        private void button1_Click(object sender, EventArgs e)
        {
            // Попытаемся открыть форму с именем Form1
            foreach(Form f in Application.OpenForms)
            {
                if (f.Name == "Form1")//Another form with name "Form1" is already opened, but it is not Form1 instance, what should I do?
                {
                    MessageBox.Show("Уже открыта");
                    return;
                }
            }
            Form f1 = new Form();
            f1.Show();
        }

      void ShowAnotherForm()
      { 
         MyAnotherForm = new MyAnotherForm();
         MyAnotherForm.Name = "Form1";
        MyAnotherForm.Show();
    }
    }

}
30 авг 09, 23:15    [7595497]     Ответить | Цитировать Сообщить модератору
 Re: Как проверить, открыта ли форма?  [new]
aleks-sam
Member

Откуда: Krasnoyarsk
Сообщений: 1852
winsky!, Ты про это?
public static Form CheckForOpening(Type ftype)
{
   foreach (Form f in Application.OpenForms)
   {
      if (f.GetType() == ftype)
         return f;
   }

   return null;
}

      void ShowAnotherForm()
      { 
         MyAnotherForm = null;
         if ((MyAnotherForm = CheckForOpening(typeof(MyAnotherForm)) == null)
         {
         MyAnotherForm = new MyAnotherForm();
         MyAnotherForm.Name = "Form1";
         MyAnotherForm.Show();
         }
         else
         {
               // focus на форму например
         }
    }
31 авг 09, 06:44    [7595685]     Ответить | Цитировать Сообщить модератору
Все форумы / WinForms, .Net Framework Ответить