我有一个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
始终为零。这表明我没有使用正确的属性。你能建议我该怎么做吗? (如果我的方法不是很好,我不介意重做。)
答案 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;
}