Проблема со значком при создании новой развернутой дочерней MDI-формы в .NET - PullRequest
14 голосов
/ 20 мая 2009

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

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

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

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

Ответы [ 9 ]

11 голосов
/ 15 июля 2011

Небольшая модификация решения 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;
    }

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

9 голосов
/ 28 июня 2009

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

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

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 и установить для него значение «Копировать всегда», чтобы оно копировалось при создании решения.

НТН Калянус

4 голосов
/ 21 сентября 2009

Я обнаружил, что единственным решением было деактивировать, а затем повторно активировать 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 , и оно сработало для меня.

3 голосов
/ 03 июля 2011
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;
}
2 голосов
/ 19 июля 2011

Я обнаружил, что это также решит проблему.

myForm.WindowState = FormWindowState.Normal;
myForm.Show();
myForm.WindowState = FormWindowState.Maximized;
1 голос
/ 02 октября 2010
form.WindowState = FormWindowState.Normal
form.Show()
form.WindowState = FormWindowState.Maximized
form.Show()

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

0 голосов
/ 14 ноября 2012

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

this.Icon = new Icon(this.Icon, this.Icon.Size);
0 голосов
/ 30 сентября 2010

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

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
0 голосов
/ 03 мая 2010

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

...