Проблема с значком при создании новой максимизированной дочерней формы MDI в .NET.

У меня есть приложение .NET 3.5 MDI WinForms.

Я устанавливаю свойство дочерней формы Icon, и значок отображается правильно в левом верхнем углу формы. Затем я максимизирую дочернюю форму, и значок все еще в порядке.

Когда дочерняя форма все еще максимизирована, я открываю другое дочернее окно, которое автоматически увеличивается. Этот значок формы не тот, что находится в свойстве Icon, но значок по умолчанию .NET(тот, который имеет синий, красный и желтый квадраты). Однако, если я изменяю размер родительской формы MDI, значок сбрасывается и отображается правильно.

Есть ли у кого-нибудь обходной путь или знаете, почему это происходит?

Ответы

Ответ 1

Правильно я нашел решение...

Обходным путем для этого является установка значка снова в событии загрузки дочерней формы следующим образом:

private void StatsForm_Load(object sender, EventArgs e)
{
    //bug that means you have to set the desired icon again otherwise it reverts to default when child form is maximised
    Icon = new System.Drawing.Icon("research.ico");
}

Это означает, что вам нужно будет сначала добавить файл значка, о котором идет речь, в проект/решение VS и установить его "Копировать всегда", чтобы он копировался при создании вашего решения.

НТН Калянус

Ответ 2

Небольшая модификация решения Calanus:

    private void MdiBase_Load(object sender, EventArgs e)
    {
        // Fixes bug where loading form maximised in MDI window shows incorrect icon.
        this.Icon = Icon.Clone() as Icon;
    }

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

Ответ 3

Я обнаружил, что единственным решением было деактивировать, а затем снова активировать дочерний MDI:

document.Show();
// Work-around for error in WinForms that causes MDI children to be loaded with the default .NET icon when opened maximised.
ActivateMdiChild(null);
ActivateMdiChild(document);

Это решение, приведенное в этот ответ на форумах MSDN, и это сработало для меня.

Ответ 4

private void frmChild_Shown(object sender, EventArgs e)
{
    // Work-around for maximized BUG
    this.Icon = this.MdiParent.Icon;
    this.WindowState = FormWindowState.Normal;
    this.WindowState = FormWindowState.Maximized;
}

Ответ 5

Я выяснил, что это также устранит проблему.

myForm.WindowState = FormWindowState.Normal;
myForm.Show();
myForm.WindowState = FormWindowState.Maximized;

Ответ 6

form.WindowState = FormWindowState.Normal
form.Show()
form.WindowState = FormWindowState.Maximized
form.Show()

Решила мою проблему!

Ответ 7

Мое решение: Оставьте значение свойства "ShowIcon" MdiChild равным true, назначьте прозрачный значок 1x1. Проблема решена.

Ответ 8

Лучшим обходным решением, которое я нашел для исправления этой проблемы, является здесь.

aNewForm.FormBorderStyle = Windows.Forms.FormBorderStyle.FixedDialog
AddHandler aNewForm.SizeChanged, AddressOf Form_SizeChanged

aNewForm.Show()
aNewForm.WindowState = FormWindowState.Maximized

RemoveHandler aNewForm.SizeChanged, AddressOf Form_SizeChanged

обработчик

Protected Sub Form_SizeChanged(ByVal sender As Object, ByVal e As EventArgs)

    If WindowState = FormWindowState.Maximized Then
        If FormBorderStyle <> FormBorderStyle.Sizable Then FormBorderStyle = FormBorderStyle.Sizable
    End If

End Sub

Ответ 9

Добавление этого в качестве первой строки в методе Form_Load для MDI Children работает для меня:

this.Icon = new Icon(this.Icon, this.Icon.Size);