使用默认ProgressBar主题自定义ProgressBar

时间:2015-05-04 15:08:35

标签: c# .net winforms progress-bar

我试图了解如何自定义或创建没有边框和方形角的.NET ProgressBar。我之前没有尝试使用自定义进度条的主要原因是我没有找到任何与系统默认进度条相同的主题。

所以我有三个问题。

  1. 如何从进度条中删除边框?

  2. 如何显示带方角的进度条?

  3. 如何在自定义控件中使用系统默认的ProgressBar主题?

  4. 我怀疑前两个是否可能,但我认为第三个可以完成,即使我不知道该怎么做。

    UPDATE:

    以下代码以某种方式解决了前两个问题,但出现了一个新问题,即当进度条的值为1时,它没有显示任何进度。我认为这不是一个主要问题,但理想情况并非如此。

    class ProgressBarEx : ProgressBar
    {
        const int WmPaint = 15;
    
        protected override void WndProc(ref Message m)
        {
            base.WndProc(ref m);
    
            switch (m.Msg)
            {
                case WmPaint:
                    using (var graphics = Graphics.FromHwnd(Handle))
                    {
                        GraphicsPath path = new GraphicsPath();
    
                        Rectangle newRectangle = ClientRectangle;
    
                        newRectangle.Inflate(-2, -2);
    
                        path.AddRectangle(newRectangle);
    
                        Region = new Region(path);
                    }
                    break;
            }
        }
    }
    

    更新2:

    我设法修复了' Value为自定义进度条percentProgress声明新属性并使用它来设置真实Value;

    this.Value = Convert.ToInt32(((((float)percentProgress / 100f) * (float)98) + 1) / 100f) * ((float)Maximum - (float)Minimum));
    

    如果有人有更好的解决方案,我会暂时停止这个问题。

1 个答案:

答案 0 :(得分:0)

同意Ron Beyer评论,如果您想节省时间,请尝试搜索CodeProject.com。以此为例:http://www.codeproject.com/Articles/31906/Progress-O-Doom