WindowState всех производных форм меняется вместе - PullRequest
0 голосов
/ 18 апреля 2020

В моем windows приложении, написанном с C#, я написал форму с именем BaseForm. В этой форме у меня есть кнопка «Развернуть», белый код:

private void btnMaximise_Click(object sender, EventArgs e)
{
    WindowState = WindowState == FormWindowState.Normal ?
    FormWindowState.Maximized : FormWindowState.Normal;
}

Теперь у меня есть несколько форм, полученных из BaseForm. Когда я нажимаю кнопку «Развернуть» в «Сказать форму 1», все остальные производные формы максимизируются вместе, и когда я снова нажимаю кнопку, они все go возвращаются к своему обычному WindowState, ВМЕСТЕ.

Я не понимаю, почему Это случилось. Я подумал, когда скажу this.WindowState Я указываю на инициируемый объект , но он действует как Stati c. Когда я нажимаю кнопку в форме Form1, я ожидаю, что только Form1 будет развернута, а не все формы с общим наследованием.

В файле Designer.cs обработчик событий связан, как показано ниже:

this.btnMaximise.Click += new System.EventHandler(this.btnMaximise_Click);

Между прочим, все эти формы являются детьми MDI для родительской формы MDI. Возможно, это как-то связано с этой проблемой.

Новый результат теста: я попытался открыть 2 формы с набором родительских элементов MDI и 2 другие без него. Результат странный. Те, которые независимы (без MDI Parent), не конфликтуют, а те, у кого MDI Parent, ведут себя одинаково. Даже когда форма с MDI Parent развернута, и я открываю совершенно новую форму (не с помощью CTRL + TAB, с созданием новой формы, установкой MDI Parent и вызовом метода .Show ()), новая форма открывается с помощью Maximized. состояние.

1 Ответ

0 голосов
/ 18 апреля 2020

Я не смог воспроизвести вашу проблему; вам нужно будет опубликовать больше кода о том, как вы создаете, наследуете и связываете эти события. Вот полный пример кода, который НЕ демонстрирует проблему:

using System;
using System.Windows.Forms;

namespace WindowsFormsApp1
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();

            this.IsMdiContainer = true;

            for (int i = 0; i < 5; i++)
                new DerivedForm(this).Show();
        }
    }

    public class DerivedForm : BaseForm {
        public DerivedForm(Form parent)
        {
            this.MdiParent = parent;
        }
    }

    public class BaseForm : Form
    {
        public BaseForm()
        {
            Button b = new Button();
            b.Text = "Max";
            b.Click += B_Click;
            this.Controls.Add(b);
        }

        private void B_Click(object sender, EventArgs e)
        {
            this.WindowState = this.WindowState == FormWindowState.Normal ? FormWindowState.Maximized : FormWindowState.Normal;        
        }
    }
}

Опубликуйте что-то вроде этого, чтобы воспроизвести вашу проблему, и мы расскажем вам почему, или рассмотрим, как это работает, и сделайте ваши настройки такими же.

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