C# 在windows窗体上始终绘制角度

C# 在windows窗体上始终绘制角度,c#,winforms,graphics,C#,Winforms,Graphics,我试图创建一个基于值改变大小的矩形,但我无法更新它。如果我用设置的值绘制矩形,它会显示出来,但是如果我在其中添加了一个“*”操作符,它不会显示出来 我以前从未使用过winform graphics,这是基于我遇到的其他帖子 守则: private void Send() { int l = 25, r = 20; // Testing values using (Graphics g = this.MainPanel.Create

我试图创建一个基于值改变大小的矩形,但我无法更新它。如果我用设置的值绘制矩形,它会显示出来,但是如果我在其中添加了一个“*”操作符,它不会显示出来

我以前从未使用过winform graphics,这是基于我遇到的其他帖子

守则:

private void Send()
        {
            int l = 25, r = 20; // Testing values

            using (Graphics g = this.MainPanel.CreateGraphics())
            {

                Brush brush = new SolidBrush(Color.LimeGreen);

                g.FillRectangle(brush, 59, 74, 16, 56 * (l / 100));
                g.FillRectangle(brush, 81, 74, 16, 56 * (r / 100));

                brush.Dispose();
                this.Invalidate();
            }

            string start = l + ":" + r + ".";
            char[] end = start.ToCharArray();
            port.Write(new string(end));
        }
如果有必要,这段代码每15毫秒运行一次。

请改用。计算矩形的高度为0,因为在分割时int值被舍入为0。更好的使用和维护

另外,我认为最好是在方法
Send()
中计算需要绘制的矩形,然后使
表单无效。您可以使用表单的方法绘制矩形。例如:

    private void Send()
    {
        float l = 25, r = 20; // Testing values

        mRectangle1 = new RectangleF(59, 74, 16, 56 * (l / 100));
        mRectangle2 = new RectangleF(81, 74, 16, 56 * (r / 100));

        Invalidate();
    }

    protected override void OnPaint(PaintEventArgs e)
    {
        base.OnPaint(e);

        using (Brush brush = new SolidBrush(Color.LimeGreen))
        {
            e.Graphics.FillRectangle(brush, mRectangle1);
            e.Graphics.FillRectangle(brush, mRectangle2);
        }
    }

    private RectangleF mRectangle1;
    private RectangleF mRectangle2;
这就是结果:


希望能有所帮助。

可能重复的感谢,除了总是放在底部之外,似乎效果不错。如果你想在子控件上画画,解决方案就要复杂一点。看看这篇文章: