2015-04-03 56 views
0

我有一個主窗體。使用KeyDown事件,我可以按照用戶的請求(按CTRL + ALT + ENTER)使窗體變成全屏。因此,我需要:1)當窗體不是在「全屏模式」,並且用戶按CTRL + ALT + ENTER,如預期的那樣,窗體變爲全屏,並且2)當窗體已經在「全屏模式」,用戶按下CTRL + ALT + ENTER,表格應該恢復原來的樣子。C#還原一個已更改的表單屬性值

將窗體轉換爲FullScreen已完成。問題是,現在我必須確定大小,位置和窗體邊框樣式(其中任何一個)的屬性在哪裏更改,然後將它們還原爲我按下鍵之前的任何值,以便我可以撤消這些屬性變化。

private bool IsFullScreen() //Is form at "FullScreen Mode"? 
{ 
    return (this.Height == Screen.PrimaryScreen.Bounds.Height 
    && this.Width == Screen.PrimaryScreen.Bounds.Width &&       
    this.FormBorderStyle == FormBorderStyle.None); 
} 

private void FullScreen(Object sender, KeyEventArgs e) 
{ 
    if (e.Alt & e.Control & e.KeyCode == Keys.Enter) 
    { 
     if (!IsFullScreen()) //Form is resized to FullScreen, only if it's not already 'fullscreened' 
     { 
      this.FormBorderStyle = FormBorderStyle.None; 
      this.Location = new Point(0, 0); 
      this.Size = new Size(Screen.PrimaryScreen.Bounds.Width, Screen.PrimaryScreen.Bounds.Height); 
     } 
     else 
     { 
      /*Form goes back to whatever size, location, and form border style 
      it had before I pressed CTRL + ALT + ENTER*/ 
     }  
    } 
} 

這怎麼可能實現?有沒有我可以使用的類/方法? (我認爲PropertyChanged可能是唯一的,但我仍然無法找到如何恢復我想要的屬性)謝謝。 PS:如果你想知道爲什麼我沒有把窗口設置爲「最大化」,窗體邊界沒有設置,並且用它來完成,事實證明,教授只是不喜歡該解決方案,並且想要我們要'全屏'它的真實,而不是'快速地讓它看起來像'。 我遇到的唯一困難就是讓表單在「完全放映」之前回到之前的狀態。

+0

在啓動會是什麼模式:全部或正常嗎? – tharif 2015-04-03 05:16:49

+0

@效用正常。然後,如果用戶希望如此,他們可以按CTRL + ALT + ENTER,這會使其變滿。如果他們再次按下它,表單應該返回到之前的大小,位置和表單邊框樣式(這就是問題所在......請記住,用戶可能更改了其中的任何一種 - 特別是大小 - ) – soulblazer 2015-04-03 05:22:47

回答

1

您可以在不使用Size參數的情況下實現此目的。你正在做的唯一一件事情是讓真正的全屏幕移除窗體邊框。

if (!IsFullScreen()) //Form is resized to FullScreen, only if it's not already 'fullscreened' 
    { 
     this.FormBorderStyle = FormBorderStyle.None; 
     this.WindowState = FormWindowState.Maximized; 
    } 
    else 
    { 
     /*Form goes back to whatever size, location, and form border style 
     it had before I pressed CTRL + ALT + ENTER*/ 
     this.FormBorderStyle = FormBorderStyle.Single; 
     this.WindowState = FormWindowState.Normal; 
    } 

如果你仍然想維護狀態信息,你可以將它們保存到成員變量並使用它們的值,當你想要反轉它們時。

private Point previousLocation; 
private Size previousSize; 
private void FullScreen() 
{ 

    if (!IsFullScreen()) //Form is resized to FullScreen, only if it's not already 'fullscreened' 
    { 
     previousLocation = this.Location; 
     previousSize = this.Size; 
     this.FormBorderStyle = FormBorderStyle.None; 
     this.Location = new Point(0, 0); 
     this.Size = new Size(Screen.PrimaryScreen.Bounds.Width, Screen.PrimaryScreen.Bounds.Height); 
    } 
    else 
    { 
     /*Form goes back to whatever size, location, and form border style 
     it had before I pressed CTRL + ALT + ENTER*/ 
     this.FormBorderStyle = FormBorderStyle.FixedSingle; 
     this.Location = previousLocation; 
     this.Size = previousSize; 
    } 
} 

請檢查未分配的空值或變量。

+0

我的教授特別禁止這樣做,只是因爲「他不喜歡那樣」,並希望我們通過尺寸和材料來做到這一點。事實證明,他希望它能夠被真正的「全面屏蔽」,而不僅僅是「當它看起來不像是完全被屏蔽了」。他說他會評分爲0任何項目完成像你建議的(我不知道有什麼問題,這是相同的結果) 如果我可以,我會做到這一點,而不是問問周圍:( 謝謝你需要花時間 – soulblazer 2015-04-03 05:27:20

+0

@soulblazer更新了答案,這是你在找什麼? – 2015-04-03 05:34:17

+0

DUH!我很累,我甚至沒有想過它......這是顯而易見的!謝謝!也許我應該保存這些代碼,然後停下來休息一天,然後睡覺。我應該更加疲倦,我意識到了。 我仍然不喜歡教授如何爲他喜歡的方式「不同」的項目給出零...那麼,再次感謝! – soulblazer 2015-04-03 05:40:25

0

首先將表格設置爲normal模式並設計其尺寸。 後面放置一個按鈕,以最大化窗體。單擊按鈕到maximize檢查窗體的屬性是否maximise/normal並更改窗體的大小模式。

要記住的唯一的事情是,如果焦點不在表單上的 快捷鍵會觸發系統快捷鍵