假設(shè)您有一個(gè) Windows 窗體應(yīng)用程序,它有一個(gè)主窗口和一個(gè)子窗口。如果您最大化主窗口和子窗口,然后最小化主窗口,子窗口也會(huì)自動(dòng)最小化。這是正確和預(yù)期的。如果您隨后恢復(fù)主窗口(通過(guò)單擊任務(wù)欄中的圖標(biāo)),主窗口會(huì)正確恢復(fù)為最大化,但輔助窗口會(huì)恢復(fù)為非最大化。有沒(méi)有什么辦法解決這一問(wèn)題?(這似乎是一個(gè) WinForms 錯(cuò)誤,但也許是設(shè)計(jì)使然……)重現(xiàn)(需要兩臺(tái)顯示器):創(chuàng)建一個(gè)新的默認(rèn) Windows 窗體應(yīng)用程序。這將創(chuàng)建一個(gè)名為Form1.選擇Project | Add Windows Form...并單擊Add以添加一個(gè)名為 的新表單Form2。將構(gòu)造函數(shù)更改Form1為如下所示:public Form1(){
InitializeComponent();
new Form2().Show(this); // New line of code.}運(yùn)行應(yīng)用程序。將 Form1 移動(dòng)到一個(gè)監(jiān)視器,將 Form2 移動(dòng)到另一個(gè)監(jiān)視器。通過(guò)單擊標(biāo)題欄上的最大化圖標(biāo)來(lái)最大化 Form1 和 Form2。通過(guò)單擊其標(biāo)題欄上的最小化圖標(biāo)來(lái)最小化 Form1。觀察 Form2 也變得最小化。通過(guò)單擊任務(wù)欄上的圖標(biāo)來(lái)恢復(fù) Form1。實(shí)際結(jié)果:Form1 恢復(fù)到其最大化狀態(tài)。Form2 不會(huì)恢復(fù)到其最大化狀態(tài)。預(yù)期結(jié)果:兩種形式都恢復(fù)到它們的最大化狀態(tài)。
1 回答

四季花海
TA貢獻(xiàn)1811條經(jīng)驗(yàn) 獲得超5個(gè)贊
經(jīng)過(guò)進(jìn)一步搜索,我找不到任何記錄在案的解決方案,所以我想出了自己的解決方案。如果您將以下方法和字段添加到子表單的實(shí)現(xiàn)中,它可以解決問(wèn)題:
protected override void OnVisibleChanged(EventArgs e)
{
base.OnVisibleChanged(e);
if (!Visible)
{
_lastState = WindowState;
}
else
{
if (_lastState == FormWindowState.Maximized)
WindowState = FormWindowState.Maximized;
}
}
FormWindowState _lastState = FormWindowState.Normal;
但是,如果有人有更好的解決方案,我會(huì)非常有興趣聽(tīng)到它。
- 1 回答
- 0 關(guān)注
- 131 瀏覽
添加回答
舉報(bào)
0/150
提交
取消