2013-02-28 70 views
6

我们有以下代码:的WinForms - 错误的窗体大小

private void MainForm_Shown(object sender, EventArgs e) 
    { 
     RepositionForm(); 
    } 

    private void RepositionForm() 
    { 
     Rectangle rect = Screen.PrimaryScreen.WorkingArea; 
     this.Width = 100; 
     this.Height = 117; 
     this.TopMost = true; 
     this.Left = rect.Width - this.Width - 1; 
     this.Top = rect.Height - this.Height - 1; 
    } 

当我们推出从Visual Studio应用程序 - 形式示出正确的尺寸:100x117。 但是,当我们通过启动EXE文件启动项目时,表单大小为106x127。

The MinimumSize, MaximumSize and Size properties are set to 100x117. 
WindowsState = Minimized 
ShowIcon = False 
ShowInTaskbar = False 
Topmost = True 
MinimizeBox - False 
MaximizeBox = False 
FormBorderSize = FixedDialog 
ControlBox = True 

这怎么可能发生,即应用程序的启动方式有什么区别?

感谢

+0

完全删除窗口边框,看看你是否得到相同的行为。 – 2013-02-28 13:19:54

+0

你是否在VS的调试模式下启动它? – 2013-02-28 13:20:25

+0

@ bash.d:是的,在调试模式下 – 2013-02-28 13:28:27

回答

1

我要大胆地猜测,这个问题是与Windows主题和/或桌面窗口管理器不是确定性为您的操作系统版本。

尝试将您的Windows主题设置为基本(桌面 - >个性化),然后重新运行测试。如果你得到不同的结果,你知道它到Windows而不是你的代码。

此外,你可能想要检查窗口框架的非客户区,看看是否从操作系统/主题的变化。

+1

我有一个Windows 8,并有一个Windows基本主题。在Windows 2003和Windows Classic上,表单大小正确。 – 2013-02-28 13:50:45

+0

解决方法是检查OnLoad()中的表单大小,并在代码中的某处创建一些常量来检查。如果您的表单大小与您所期望的不匹配,请获取差异并添加它以获得您希望的正确的绝对表单大小。 – 2013-02-28 13:53:00

+0

我们实际上已经试图把它放到后面的线程中,把这段代码放到Resize和Move事件等等。没有什么帮助 - 表单大小没有改变。 – 2013-02-28 17:12:56