C#:在非主监视器上使用 DrawRectangle 绘制的矩形不会呈现上边框和左边框

本文关键字:边框 左边 绘制 监视器 DrawRectangle | 更新日期: 2023-09-27 18:32:24

我有一个全屏表单,在 Paint 事件的处理程序中,我在整个表单周围绘制了一个 2px 边框。我为连接到计算机的每个屏幕创建这些表单之一。由于某种原因,上边框和左边框未在任何非主显示器上绘制。表单的背景覆盖了整个屏幕,但我看不到(使用 GDI)在从顶部向下约 3px 和从屏幕左侧向下约 3px 的区域上绘制(使用 GDI)。

我的画图事件处理程序代码如下。

private void OnPaint(object sender, PaintEventArgs e)
    {
        using (Graphics g = this.CreateGraphics())
        {
            int border = 2;
            int startPos = 0;
            // offset used to correctly paint all the way to the right and bottom edges
            int offset = 1;
            Rectangle rect = new Rectangle(startPos, startPos, this.Width - border + offset, this.Height - border + offset);
            Pen pen = new Pen(Color.Red, border);
            // draw a border 
            g.DrawRectangle(pen, rect);
        }
    }

以前有人见过吗?

C#:在非主监视器上使用 DrawRectangle 绘制的矩形不会呈现上边框和左边框

您的代码工作正常。您应该知道何时使用 this.Widththis.Height ,这些值使用围绕表单的框架计算。对于"高度",窗体控件的高度将添加到计算的高度。您可以使用此代码:

using (Graphics g = this.CreateGraphics())
            {
                int border = 2;
                int startPos = 0;
                // offset used to correctly paint all the way to the right and bottom edges
                int offset = 1;
                Rectangle rect = new Rectangle(startPos, startPos, this.Width-20, this.Height-40);
                Pen pen = new Pen(Color.Red, border);
                // draw a border 
                g.DrawRectangle(pen, rect);
            }

更新:

如果要计算确切的大小,可以使用以下代码:

 int width,height;
    public Form1()
    {
        InitializeComponent();
        PictureBox pc = new PictureBox();
        pc.Dock = DockStyle.Fill;
        this.Controls.Add(pc);
        pc.Visible = false;
        width = pc.Width;
        height = pc.Height;
        pc.Dispose();
    }
    private void Form1_Paint(object sender, PaintEventArgs e)
    {

        using (Graphics g = this.CreateGraphics())
        {
            int border = 2;
            int startPos = 0;
            // offset used to correctly paint all the way to the right and bottom edges
            int offset = 1;
            Rectangle rect = new Rectangle(startPos, startPos, width,height);
            Pen pen = new Pen(Color.Red, border);
            // draw a border 
            g.DrawRectangle(pen, rect);
        }
    }