我正在尝试创建一个根据值更改大小的矩形,但我无法更新它。如果我用设置值绘制矩形,它会显示,但如果我随后向其添加“*”运算符,它不会显示。
我以前从未使用过 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。更好用float和 RectangleF .
另外,我认为最好在方法 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;
这就是结果:
希望有帮助。
关于c# - 在 Windows 窗体上绘制始终更新的矩形,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21750320/