如何为需要 2 个参数来报告进度的用户控件创建 RepositoryItem?

问题描述

我有一个名为 SegmentedProgressBar 的自定义用户控件,用于显示属于多线程下载的线程的进度。我需要在 Devexpress GridControl 中使用。但我不知道该怎么做,在我的谷歌搜索中找不到任何明确的资源。如果有人能提供帮助,我将不胜感激。

我使用 Bar 数组和 ContentLength 来显示进度。 ContentLength 是远程源中文件的总长度。 Bar 类包含 2 个属性:部分下载的总长度和起始偏移量。

class SegmentedProgressBar : ProgressBar
{
    public SegmentedProgressBar()
    {
        ContentLength = 100;
        bars = new Bar[] { };

    Size = new Size(100,20);
    SetStyle(ControlStyles.DoubleBuffer,true);
    SetStyle(ControlStyles.UserPaint,true);
    SetStyle(ControlStyles.AllPaintingInWmPaint,true);
    this.SizeChanged += SegmentedProgressBar_SizeChanged;
}

void SegmentedProgressBar_SizeChanged(object sender,EventArgs e)
{
    Invalidate();
}
    
    
public override Color BackColor
{
    get
    {
        return base.BackColor;
    }
    set
    {
        base.BackColor = value;
        Invalidate();
    }
}
protected override void OnPaint(PaintEventArgs e)
{
    var grp = e.Graphics;
    step = Width * 1f / contentLength;
    foreach (var br in bars.Where(x=>x.Length > 0))
    {
        var x = br.Start * step;
        var rectF = new RectangleF(x,br.Length * step,Height);
        grp.FillRectangle(Brushes.Blue,rectF);
    }

    base.OnPaint(e);
}

private long contentLength;
private float step;
private Bar[] bars;

public Bar[] Bars
{
    get { return bars; }
    set
    {
        bars = value;
        foreach (var element in bars)
        {
            element.PropertyChanged += element_PropertyChanged;
        }
        Invalidate();
    }
}

public long ContentLength
{
    get { return contentLength; }
    set
    {
        contentLength = value;
        step = Width * 1f / contentLength;
        Invalidate();
    }
}

private void element_PropertyChanged(object sender,EventArgs e)
{
    Invalidate();


   }
}

class Bar : INotifyPropertyChanged
{
    public event PropertyChangedEventHandler PropertyChanged;
    public Bar(long length,long start)
    {
        this.length = length;
        this.start = start;
    }

    private long length;
    private long start;

    

    public long Start
    {
        get { return start; }

        set
        {
            var noteq = value != start;
            length = value;

            if (noteq && PropertyChanged != null)
                PropertyChanged(this,null);

        }
    }
    public long Length
    {
        get { return length; }
        set
        {
            var noteq = value != length;
            length = value;

            if (noteq && PropertyChanged != null)
                PropertyChanged(this,null);

        }
    }



}

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...