【发布时间】:2019-01-21 01:26:45
【问题描述】:
我有一个与连接交互的 WinForms 应用程序。如果连接正常,我想显示一个绿色(“一切正常”)实心圆圈,否则我想显示一个红色实心圆圈。
我在工具箱中没有找到圆形元素,所以我想我必须自己绘制它。
我创建了一个名为picBoxClientState 的图片框并从这段代码开始
public partial class FrmMain : Form
{
public void CheckSignedInState()
{
// some other code
DrawClientStateIcon(client.IsSignedIn);
}
private void DrawClientStateIcon(bool isSignedIn)
{
Point rectangleLocation = picBoxClientState.Location;
Size rectangleSize = picBoxClientState.Size;
Rectangle rectangle = new Rectangle(rectangleLocation, rectangleSize);
Color iconColor = isSignedIn ? Color.Green : Color.Red;
SolidBrush iconBrush = new SolidBrush(iconColor);
Graphics graphics = picBoxClientState.CreateGraphics();
graphics.FillEllipse(iconBrush, rectangle);
}
}
当我打电话给CheckSignedInState() 时,如何在这个图片框上画画?
也许有更好的方法来代替绘图? (我不想切换两个图像,因为可能需要绘制更多状态)
【问题讨论】:
-
您可以使用power pack 轻松创建椭圆形
-
对不起,我只是想在这个画框上画画。尽管调试器到达了这段代码,但上面没有绘制任何内容。
-
永远不要使用 CreateGraphics() 来绘制。 iconColor 变量必须是类的一个字段。使用 pb 的 Paint 事件进行绘制。当您更改 iconColor 时,然后调用 pb 的 Invalidate() 方法使其重新绘制。
-
所以如果我想再画一次,我就打电话给
Invalidate()? -
是的。更改绘制时使用的数据,并在应该绘制的控件上调用 Invalidate。
标签: c# winforms graphics gdi+ picturebox