弹来弹去跑马灯!

c# multi-ply download ui

first neet add an user control "DownloadBar":

/*

  • Created by SharpDevelop.
  • User: gwang
  • Date: 2016/8/25
  • Time: 14:01
  • To change this template use Tools | Options | Coding | Edit Standard Headers.
    */
    using System;
    using System.ComponentModel;
    using System.Drawing;
    using System.Windows.Forms;

namespace testHttp
{
///


/// Description of DownloadBar.
///

public partial class DownloadBar : UserControl
{
public DownloadBar()
{
//
// The InitializeComponent() call is required for Windows Forms designer support.
//
InitializeComponent();
Anchor=AnchorStyles.Left|AnchorStyles.Right;
// Width=Parent.Width -40;
Height=65;

//
// TODO: Add constructor code after the InitializeComponent() call.
//
}

public DownloadBar(DownLoadInfo info)
{
//
// The InitializeComponent() call is required for Windows Forms designer support.
//
InitializeComponent();
MinimumSize= new Size(126,66);
this.info=info;
btn1.Text=""+info.title +info.uid;
btn1.Visible=false;
lb1.Visible=true ;

if (info.ProgressPercentage<100){

lb1.Visible=true;
lb1.Text=info.ProgressPercentage+"%";

}

t = new Timer();
t.Tick+=t_tick;
t.Start ();
}

protected override void OnLoad(EventArgs e)
{

base.OnLoad(e);
//Anchor=AnchorStyles.Left|AnchorStyles.Right;
// this.Size = new System.Drawing.Size(274, 65);
this.Size = new System.Drawing.Size(Parent.Width-20, 65);
this.ResumeLayout(false);

}

Timer t;
DownLoadInfo info;

void t_tick(object sender, EventArgs e){

if(info.ProgressPercentage>=100 || info.isCompleted )
{
//lb1.Visible=false;
t.Stop();
btn1.Visible=true ;
lb1.Visible=false;
}

lb1.Text=info.ProgressPercentage+"%";
lb1.Width=(int )( Width* ((double )info.ProgressPercentage * 0.01d));

}
void Btn1Click(object sender, EventArgs e)
{
MessageBox.Show(info.title );
}

}
}

---------partial class for ui InitializeComponent------------------------

/*

  • Created by SharpDevelop.

  • User: gwang

  • Date: 2016/8/25

  • Time: 14:01

  • To change this template use Tools | Options | Coding | Edit Standard Headers.
    */
    namespace testHttp
    {
    partial class DownloadBar
    {
    ///


    /// Designer variable used to keep track of non-visual components.
    ///

    private System.ComponentModel.IContainer components = null;
    private System.Windows.Forms.Label lb1;
    private System.Windows.Forms.Button btn1;

    ///


    /// Disposes resources used by the control.
    ///

    /// true if managed resources should be disposed; otherwise, false.
    protected override void Dispose(bool disposing)
    {
    if (disposing) {
    if (components != null) {
    components.Dispose();
    }
    }
    base.Dispose(disposing);
    }

    ///


    /// This method is required for Windows Forms designer support.
    /// Do not change the method contents inside the source code editor. The Forms designer might
    /// not be able to load this method if it was changed manually.
    ///

    private void InitializeComponent()
    {
    this.lb1 = new System.Windows.Forms.Label();
    this.btn1 = new System.Windows.Forms.Button();
    this.SuspendLayout();
    //
    // lb1
    //
    this.lb1.BackColor = System.Drawing.Color.DodgerBlue;
    this.lb1.Dock = System.Windows.Forms.DockStyle.Left;
    this.lb1.Location = new System.Drawing.Point(0, 0);
    this.lb1.Name = "lb1";
    this.lb1.Size = new System.Drawing.Size(55, 65);
    this.lb1.TabIndex = 0;
    this.lb1.Text = "10%";
    this.lb1.TextAlign = System.Drawing.ContentAlignment.MiddleCenter;
    //
    // btn1
    //
    this.btn1.Dock = System.Windows.Forms.DockStyle.Fill;
    this.btn1.Location = new System.Drawing.Point(0, 0);
    this.btn1.Name = "btn1";
    this.btn1.Size = new System.Drawing.Size(274, 65);
    this.btn1.TabIndex = 1;
    this.btn1.UseVisualStyleBackColor = true;
    this.btn1.Click += new System.EventHandler(this.Btn1Click);
    //
    // DownloadBar
    //
    this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
    this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
    this.BackColor = System.Drawing.Color.LightSteelBlue;
    this.Controls.Add(this.lb1);
    this.Controls.Add(this.btn1);
    this.Name = "DownloadBar";
    this.Size = new System.Drawing.Size(274, 65);
    this.ResumeLayout(false);

    }
    }
    }


2 main ui form code behind "FrmDownload":

/*

  • Created by SharpDevelop.
  • User: gwang
  • Date: 2016/8/25
  • Time: 14:34
  • To change this template use Tools | Options | Coding | Edit Standard Headers.
    */
    using System;
    using System.Drawing;
    using System.Windows.Forms;

namespace testHttp
{
///


/// Description of FrmDownload.
///

public partial class FrmDownload : Form
{
public FrmDownload()
{
//
// The InitializeComponent() call is required for Windows Forms designer support.
//
InitializeComponent();

//
// TODO: Add constructor code after the InitializeComponent() call.
//
}

int uid=1;

void Button1Click(object sender, EventArgs e)
{
DownLoadInfo info = new DownLoadInfo();
info.url="http://sw.bos.baidu.com/sw-search-sp/av_aladdin/a997f8c5c22/rj_hb1174.exe";
info.title="test it "+ uid ;
info.uid=""+uid ;
HttpUtils.downloadFile(info);
uid++;

this.flowLayoutPanel1.Controls.Add(new DownloadBar(info));
Text="there "+ this.flowLayoutPanel1.Controls.Count +" downloading.........";
}

}
}

oh... first need define util class "HttpUtils"

/*

  • Created by SharpDevelop.

  • User: gwang

  • Date: 2016/8/24

  • Time: 17:23

  • To change this template use Tools | Options | Coding | Edit Standard Headers.
    */
    using System;
    using System.Net;
    using System.ComponentModel;
    using System.Collections;
    using System.Collections.Generic;
    using System.Linq;
    namespace testHttp
    {
    ///


    /// Description of HttpUtils.
    ///

    public class HttpUtils
    {
    public HttpUtils()
    {

    }

    public static List listDownloadInfo= new List();

    public static void downloadFile(DownLoadInfo info){

    if(listDownloadInfo.Count (n=> n.uid==info.uid )>0)
    {

    return;
    }

    listDownloadInfo.Add(info);
    WebClient wc=new WebClient();
    wc.DownloadProgressChanged+= wc_DownloadProgressChanged;
    wc.DownloadDataCompleted+=wc_DownloadDataCompleted;

    //wc.DownloadStringAsync(new Uri("https://jirafnd.dev.activenetwork.com/browse/HYTEK-274",UriKind.Absolute ),info);
    wc.DownloadDataAsync(new Uri(info.url ,UriKind.Absolute ),info);

    }

    private static void wc_DownloadProgressChanged(object sender, DownloadProgressChangedEventArgs e){

    (e.UserState as DownLoadInfo ).ProgressPercentage= e.ProgressPercentage;

    }

    private static void wc_DownloadDataCompleted(object sender, DownloadDataCompletedEventArgs e){

    (e.UserState as DownLoadInfo ).isCompleted =( e.Error==null) ;

    }

    }

    // this for basic info class
    public class DownLoadInfo{

    public string title{get;set;}
    public string url{get;set;}
    public string uid{get;set;}
    public int ProgressPercentage{ get;set;}
    public bool isCompleted{get;set;}

    }

}

posted @ 2016-08-25 15:02  wgscd  阅读(582)  评论(0)    收藏  举报