2015-04-03 72 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并更改窗体的大小模式。

要记住的唯一的事情是,如果焦点不在表单上的 快捷键会触发系统快捷键