确定屏幕的哪一半

时间:2016-05-18 10:24:49

标签: c# .net winforms

我有一个Winforms应用程序。这有一个启动其他形式的表单,我们称之为控制表单。我希望控制表能够查看是否在当前屏幕的上半部分或下半部分。如果它在上半部分,其他形式应该出现在它下面。如果是下半部分,则应在其上方显示其他形式。另请注意,此应用的用户有很多(4-6)个屏幕。

我的理论是,如果我们看当前屏幕的高度并除以2,这就告诉我们中间点的Y坐标。

我有以下代码:

gadgetBase.Show(); // Gadget base is another form
var thisScreen = Screen.FromHandle(this.Handle);
if (this.Location.Y > thisScreen.Bounds.Y/2)
{
    //  we're in the top half
    gadgetBase.Top = this.Bottom + SystemInformation.BorderSize.Height;
    gadgetBase.Left = this.Left;
}
else
{
    //  we're in the bottom half
    gadgetBase.Top = this.Top + SystemInformation.BorderSize.Height + gadgetBase.Height;
    gadgetBase.Left = this.Left;

}

但是,thisScreen.Bounds.Y始终为零。这表明我没有使用正确的属性。你能建议我该怎么做吗? (如果我的方法不是很好,我不介意重做。)

2 个答案:

答案 0 :(得分:0)

也许你可以使用屏幕分辨率?

Screen ThisScreen = Screen.FromControl(TestForm);
MessageBox.Show(ThisScreen.Bounds.Width.ToString() + "x" + ThisScreen.Bounds.Height.ToString());

答案 1 :(得分:0)

以下代码回答了我的原始问题:确定屏幕的哪一半并相应地对齐子表单:

                gadgetBase.Show();
                var thisScreen = Screen.FromControl(this);
                if (this.Location.Y < thisScreen.Bounds.Height/2)
                {
                    //  we're in the top half
                    gadgetBase.Top = this.Bottom + SystemInformation.BorderSize.Height;
                    gadgetBase.Left = this.Left;
                }
                else
                {
                    //  we're in the bottom half
                    gadgetBase.Top = this.Top - SystemInformation.BorderSize.Height - gadgetBase.Height;
                    gadgetBase.Left = this.Left;

                }