C# 如何在绘制事件中调整/重画矩形?
我有三个监视器,配置如下: 监视器1监视器2监视器3 [1280 x 1024][1200 x 1900][1280 x 1024] 我使用一个表格来勾勒出一个选定的监视器(下面的代码),当我初始化监视器1和监视器3或在监视器1和监视器3之间进行更改时,它非常有效,但当选择监视器2时,会绘制两个矩形:/ 我试图用许多不同的方法修改代码,但似乎没有任何效果。我想也许有人能帮我理解为什么要画两个矩形(1280x1024和1200x1900)以及如何校正 谢谢您的时间、问候和新年快乐 如果可能的话,请保持简单的解释,因为我还在学习C# 如何在绘制事件中调整/重画矩形?,c#,C#,我有三个监视器,配置如下: 监视器1监视器2监视器3 [1280 x 1024][1200 x 1900][1280 x 1024] 我使用一个表格来勾勒出一个选定的监视器(下面的代码),当我初始化监视器1和监视器3或在监视器1和监视器3之间进行更改时,它非常有效,但当选择监视器2时,会绘制两个矩形:/ 我试图用许多不同的方法修改代码,但似乎没有任何效果。我想也许有人能帮我理解为什么要画两个矩形(1280x1024和1200x1900)以及如何校正 谢谢您的时间、问候和新年快乐 如果可能的话,请
public partial class ScreenArea : Form
{
private Pen _pen;
private int screenSelect;
public ScreenArea(int selectScreen = 0)
{
//xInitializeComponent();
TopMost = true;
ShowInTaskbar = true;
FormBorderStyle = FormBorderStyle.None;
BackColor = Color.LightGreen;
TransparencyKey = Color.LightGreen;
_pen = new Pen(Color.Aqua, 5);
Paint += new PaintEventHandler(ScreenArea_Paint);
ScreenSelect = screenSelect;
}
private void ScreenArea_Paint(object sender, PaintEventArgs e)
{
e.Graphics.DrawRectangle(_pen, 0, 0, Width, Height);
}
public int ScreenSelect
{
get
{
return screenSelect;
}
set
{
Rectangle screenBounds;
try
{
screenBounds = Screen.AllScreens[value].Bounds;
screenSelect = value;
}
catch (Exception)
{
screenBounds = Screen.AllScreens[screenSelect].Bounds;
}
this.Left = screenBounds.X;
this.Top = screenBounds.Y;
this.Width = screenBounds.Width;
this.Height = screenBounds.Height;
}
}
}
阅读有关VirtualScreen的说明(有一部分与DpiAwareness相关,不要错过)。底部是一段代码,用于获取每个显示器的DC,以备需要。请记住使表单无效()重新绘制表单。顺便说一句,在此类实现中重写
OnPaint
通常比订阅Paint事件要好。太好了,谢谢。可以玩的很多东西:-)