C # Windows Forms - ограниченное количество форм? - PullRequest
0 голосов
/ 17 сентября 2018

У меня проблема с c # и Windows Forms.

Я занимаюсь разработкой приложения, которому требуется более 10 форм.

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

Но сейчас я нахожусь в форме нет. 5. Я не могу связать любую кнопку с этой новой формой ... В более ранних формах это работало ??

Есть ли ограничения на количество форм?

Спасибо за вашу помощь!

Привет из Германии

Код: здесь это работает

namespace WindowsFormsApplication1
{
    public partial class Form3: Form
    {
        public Form3()
        {
            InitializeComponent();
        }

        private void button1_Click(object sender, EventArgs e)
        {
            this.Hide();
            Form4 f4 = new Form4();
            f4.ShowDialog();
        }
    }
}

Код: здесь не работает

namespace WindowsFormsApplication1
{
    public partial class Form4: Form
    {
        public Form4()
        {
            InitializeComponent();
        }

        private void button1_Click(object sender, EventArgs e)
        {
            this.Hide();
            Form3 f3 = new Form3();
            f3.ShowDialog();
        }

        private void button2_Click(object sender, EventArgs e)
        {

                this.Hide();
                Form5 f5 = new Form5();
                f5.ShowDialog();

        }
    }
}

1 Ответ

0 голосов
/ 10 октября 2018

Это связано с тем, что вы используете Hide() вместо Close().

Если вы используете функцию Hide(), она просто устанавливает свойство формы Visibility.Hidden, что означаетчто форма все еще работает в фоновом режиме.

Теперь, когда вы вызываете функцию из Form4 в «Закрыть» и открываете Form3, вы просто скрываете Form4, если хотитеперезвоните Form4, вы создадите два Form4 (того же типа), так как он все еще находится в фоновом режиме.

Один из способов, который мне нравится делать, это проверить, открыта ли формаперед созданием новой:

private void button1_Click(object sender, EventArgs e)
    {
        Close();
        var app = Application.OpenForms["Form3"];
        if (app == null)
        {
            Form3 f3 = new Form3();
            f3.Show();
        }
        else {  app.Show(); app.BringToFront(); }
    }

Или вы можете просто вызвать новую форму, но не забудьте закрыть форму.

private void button1_Click(object sender, EventArgs e)
    {
        Close();
        Form3 f3 = new Form3();
        f3.Show();
    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...