Ошибки C # .NET MDI при программном сокрытии и повторном отображении развернутой дочерней формы и при максимальном увеличении значок дочерней формы не может быть изменен

В основном у меня две проблемы с C # .NET MDI. Вы можете загрузить решение VS2010, которое воспроизводит ошибки здесь .

1) При программном скрытии и повторном отображении развернутой дочерней формы, он снова не разворачивается должным образом и не становится ни развернутым, ни в нормальном состоянии.

childForm = new Form();
childForm.Text = "Child Form";
childForm.MdiParent = this;

...

private void showButton_Click(object sender, EventArgs e)
{
    childForm.Visible = true;
}

...

private void hideButton_Click(object sender, EventArgs e)
{
    childForm.Visible = false;
}

Когда дочерняя форма развернута, затем программно скрыта и снова отображается, она становится примерно такой (обратите внимание на строку меню - появляется блок управления дочерней формы, но дочерняя форма не развернута):

alt text

На этом этапе дочерняя форма не может быть перемещена. Однако я нашел обходной путь для этого, просто показывая и скрывая фиктивную дочернюю форму, которая заставляет фактическую дочернюю форму правильно разворачиваться. Но при этом область MDI начинает мерцать. Пробовал методы Invalidate, Refresh, Update, но они не помогают. Может быть, есть другие обходные пути, чтобы преодолеть эту ошибку и не заставлять область MDI мерцать фиктивной дочерней формой?

private void workaround1Button_Click(object sender, EventArgs e)
{
    dummyForm.Visible = true;
    dummyForm.Visible = false;
}

2) Когда дочерняя форма развернута, значок дочерней формы отображается в строке меню. Однако, если вам нужно изменить значок, когда дочерняя форма развернута, значок в строке меню не обновляется (см. изображение выше). Я также нашел обходной путь для этого, который в основном скрывает и показывает строку меню. Значок обновляется, но заставляет мерцать все, что находится ниже строки меню. Пробовал методы Invalidate, Refresh, Update, но они не помогают. Есть ли другой способ сделать так, чтобы панель меню обновляла значок дочерней формы?

private void workaround2Button_Click(object sender, EventArgs e)
{
    menuStrip.Visible = false;
    menuStrip.Visible = true;
}

Также я заметил, что когда родительская форма находится в нормальном режиме состояния окна (не развернуто) и вы изменяете ширину или высоту формы на 1 пиксель, Дочерняя форма становится развернутой, как и должно быть, а значок дочерней формы в строке меню обновляется должным образом, и вам не нужны другие обходные пути, описанные выше. Если я программно изменяю размер формы, форма мерцает на 1 пиксель, и я не могу этого сделать, когда родительская форма развернута. Есть ли способ вызвать функцию перерисовки / обновления, которая вызывается при изменении размера формы и которая заставляет дочернюю форму разворачиваться должным образом, а значок в строке меню обновляется?

8
задан Cœur 8 December 2017 в 14:11
поделиться