我通过暂停this example创建了自定义ProgressBar。
在我的应用程序中,当发生特定事件时,会打印一个页面并显示打印预览。
当出现打印预览时,我会在ProgressBar中添加一个例外。
代码行:
ProgressBarRenderer.DrawHorizontalBar(g, rect);
例外:
操作系统中的用户禁用了视觉样式。
我添加了一个测试以避免异常:
if (!ProgressBarRenderer.IsSupported)
return;
现在我没有异常,但测试失败了,它总是返回。因此,酒吧没有涂漆,也没有再出现。
我可以做些什么来保持我的ProgressBar始终被绘制?
答案 0 :(得分:0)
这不是可以通过编程方式修复的内容。您需要配置操作系统以允许此功能。您可以通过导航到“性能选项”>来执行此操作。视觉效果并启用“在窗口和按钮上使用视觉样式”功能。
如果您在查找性能选项时遇到困难,可以尝试在“开始”中键入以下内容:“调整Windows的外观和性能”
答案 1 :(得分:0)
这不是解决这个问题的真正方法,但是我提供了一个解决方法。我没有使用ProgressBarRenderer
,而是绘制矩形。
OnPaint
方法现在是:
protected override void OnPaint(PaintEventArgs e)
{
Rectangle rect = ClientRectangle;
using (SolidBrush brush = new SolidBrush(BackColor))
e.Graphics.FillRectangle(brush, rect);
e.Graphics.DrawRectangle(Pens.Black, rect.X, rect.Y, rect.Width - 2, rect.Height - 2);
rect.Inflate(-3, -3);
if (Value > 0)
{
Rectangle clip = new Rectangle(rect.X, rect.Y, (int)Math.Round(((float)Value / Maximum) * rect.Width), rect.Height);
using (SolidBrush brush = new SolidBrush(ForeColor))
e.Graphics.FillRectangle(brush, clip);
}
using (Font f = new Font(sgvDesigner.FontFamily, 12))
{
String text = getDisplayText();
SizeF len = e.Graphics.MeasureString(text, f);
Point location = new Point(Convert.ToInt32((Width / 2) - len.Width / 2), Convert.ToInt32((Height / 2) - len.Height / 2));
e.Graphics.DrawString(text, f, TextColor, location);
}
return;
}
progressBar看起来像这样: