Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/kotlin/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 向工具栏进度条添加文本_C#_System.drawing - Fatal编程技术网

C# 向工具栏进度条添加文本

C# 向工具栏进度条添加文本,c#,system.drawing,C#,System.drawing,我正在尝试向a添加一些文本,但迄今为止未成功,以下是我发现的一些代码: 问题是工具栏进度条没有CreateGraphics方法。所以我想知道是否有人能够成功地将文本添加到工具栏进度条中 更新 好的,ToolStripProgressBar似乎有一个进度条属性,而该属性又有CreateGraphics方法,但现在的问题是文本值正在闪烁,我该如何解决这个问题?修订后的守则如下: private void pbPrecentage(ToolStripProgressBar pb) { int

我正在尝试向a添加一些文本,但迄今为止未成功,以下是我发现的一些代码:

问题是工具栏进度条没有CreateGraphics方法。所以我想知道是否有人能够成功地将文本添加到工具栏进度条中

更新 好的,ToolStripProgressBar似乎有一个进度条属性,而该属性又有CreateGraphics方法,但现在的问题是文本值正在闪烁,我该如何解决这个问题?修订后的守则如下:

private void pbPrecentage(ToolStripProgressBar pb)
{
    int percent = (int)(((double)(pb.Value - pb.Minimum) /
    (double)(pb.Maximum - pb.Minimum)) * 100);

    using (Graphics gr = pb.ProgressBar.CreateGraphics())
    {
        gr.DrawString(percent.ToString() + "%",
            SystemFonts.DefaultFont,
            Brushes.Black,
            new PointF(pb.Width / 2 - (gr.MeasureString(percent.ToString() + "%",
                SystemFonts.DefaultFont).Width / 2.0F),
            pb.Height / 2 - (gr.MeasureString(percent.ToString() + "%",
                SystemFonts.DefaultFont).Height / 2.0F)));
    }
}

您遇到了一个关于Windows窗体的非常常见的问题,它基于GDI+。控件绘图(以及图形等用户绘图上下文)的双缓冲标准设置已关闭。因此,只需在表单中添加几行代码:

public Form1()
{
//Activate Double Buffering for all kind of drawing within your form
this.SetStyle(ControlStyles.AllPaintingInWmPaint | ControlStyles.UserPaint | ControlStyles.DoubleBuffer, true);
}
如果您还想获得更好的图形,则还应为图形上下文使用平滑模式:

private void pbPrecentage(ToolStripProgressBar pb)
{
    int percent = (int)(((double)(pb.Value - pb.Minimum) /
    (double)(pb.Maximum - pb.Minimum)) * 100);

    using (Graphics gr = pb.ProgressBar.CreateGraphics())
    {
        //Switch to Antialiased drawing for better (smoother) graphic results
        gr.SmoothingMode = SmoothingMode.AntiAlias;
        gr.DrawString(percent.ToString() + "%",
            SystemFonts.DefaultFont,
            Brushes.Black,
            new PointF(pb.Width / 2 - (gr.MeasureString(percent.ToString() + "%",
                SystemFonts.DefaultFont).Width / 2.0F),
            pb.Height / 2 - (gr.MeasureString(percent.ToString() + "%",
                SystemFonts.DefaultFont).Height / 2.0F)));
    }
}

我需要使用MethodInvoker来解决绘制更新进度条时出现的问题

下面是使用计时器调用的updateProgressBars()函数

private void updateProgressBars(object sender, System.Timers.ElapsedEventArgs e)
    {
        this.Invoke(new MethodInvoker(delegate
        {
            FillDiskRatio(false);
        }));
    }

FillDiskRatio()更新进度条的比率。

此问题也发布在
private void updateProgressBars(object sender, System.Timers.ElapsedEventArgs e)
    {
        this.Invoke(new MethodInvoker(delegate
        {
            FillDiskRatio(false);
        }));
    }