Проблема с значком при создании новой максимизированной дочерней формы 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);