显示打印预览

时间:2017-09-19 14:34:10

标签: c# winforms progress-bar

我通过暂停this example创建了自定义ProgressBar。

在我的应用程序中,当发生特定事件时,会打印一个页面并显示打印预览。

当出现打印预览时,我会在ProgressBar中添加一个例外。

代码行:

ProgressBarRenderer.DrawHorizontalBar(g, rect);

例外:

  

操作系统中的用户禁用了视觉样式。

我添加了一个测试以避免异常:

if (!ProgressBarRenderer.IsSupported)
    return;

现在我没有异常,但测试失败了,它总是返回。因此,酒吧没有涂漆,也没有再出现。

我可以做些什么来保持我的ProgressBar始终被绘制?

2 个答案:

答案 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看起来像这样:

enter image description here