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

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

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

最佳答案

使用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

希望有帮助。

关于c# - 在 Windows 窗体上绘制始终更新的矩形,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21750320/

相关文章:

c# - 从容器中删除控件的最干净的方法是什么?

c# - ArgumentException - 在异步中对事件 TaskScheduled 使用未定义的关键字值 1

c# - 由 ref 传递的列表 - 帮我解释一下这个行为

c# - 格式化文件中的文本表,将每行两行合并为一行

c# - 从子窗体设置 MdiParent

c++ - 椭圆与修改一个轴的线相切

c++ - 图形 gem IV。使用邻域图对二值图像进行细化

c# - 如何在 C# 中单击时将鼠标指针更改为图像

c# - 在讨论C#代码时,您如何发音'`T?`'

c# - 如何以编程方式更改默认音频输入设备