C# 如何在绘制事件中调整/重画矩形?

C# 如何在绘制事件中调整/重画矩形?,c#,C#,我有三个监视器,配置如下: 监视器1监视器2监视器3 [1280 x 1024][1200 x 1900][1280 x 1024] 我使用一个表格来勾勒出一个选定的监视器(下面的代码),当我初始化监视器1和监视器3或在监视器1和监视器3之间进行更改时,它非常有效,但当选择监视器2时,会绘制两个矩形:/ 我试图用许多不同的方法修改代码,但似乎没有任何效果。我想也许有人能帮我理解为什么要画两个矩形(1280x1024和1200x1900)以及如何校正 谢谢您的时间、问候和新年快乐 如果可能的话,请

我有三个监视器,配置如下:

监视器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事件要好。太好了,谢谢。可以玩的很多东西:-)