在Windows窗体上绘制始终更新的矩形

时间:2014-02-13 09:39:57

标签: c# winforms graphics

我正在尝试使用一个基于值更改大小的矩形,但我无法让它更新。如果我用设定值绘制矩形它会显示,但如果我再添加一个“*”运算符,它就不会显示。

我之前从未使用过winform图形,这是基于我遇到的其他帖子。

代码:

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));
        }

如果重要的话,这段代码每15ms运行一次。

1 个答案:

答案 0 :(得分:2)

请改用RectangleF。计算矩形的高度为0,因为在分割时int值会舍入为0。更好地使用floatRectangleF

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

    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;

这就是结果:

enter image description here

希望它有所帮助。