Windows Forms: Internet Download Manager in C# Part 2
By FoxLearn 5/22/2017 8:36:23 PM 9.8K
How to make an Internet Download Manager like IDM in C#
Step 5: Open user settings, create a path property to store your path
Add code to handle frmSetting form
namespace DownloadManager { public partial class frmSetting : Form { public frmSetting() { InitializeComponent(); } private void btnBrowse_Click(object sender, EventArgs e) { //Open the folder dialog, allowing you to select the path using(FolderBrowserDialog fbd = new FolderBrowserDialog() { Description="Select your path." }) { if (fbd.ShowDialog() == DialogResult.OK) txtPath.Text = fbd.SelectedPath; } } private void btnSave_Click(object sender, EventArgs e) { if (!string.IsNullOrEmpty(txtPath.Text)) { //Save path to user settings Properties.Settings.Default.Path = txtPath.Text; Properties.Settings.Default.Save(); this.Close(); } else MessageBox.Show("Please select your path.", "Message", MessageBoxButtons.OK, MessageBoxIcon.Information); } } }
Add code to handle frmAddUrl form
namespace DownloadManager { public partial class frmAddUrl : Form { public frmAddUrl() { InitializeComponent(); } public string Url { get; set; } //Get url from textbox private void btnOK_Click(object sender, EventArgs e) { this.Url = txtUrl.Text; } } }
Add code to handle frmDownload form
namespace DownloadManager { public partial class frmDownload : Form { public frmDownload() { InitializeComponent(); } public frmDownload(frmMain frm) { InitializeComponent(); _frmMain = frm; } private void btnStart_Click(object sender, EventArgs e) { //Get path and download file from internet Uri uri = new Uri(this.Url); FileName = System.IO.Path.GetFileName(uri.AbsolutePath); client.DownloadFileAsync(uri, Properties.Settings.Default.Path + "/" + FileName); } private void btnStop_Click(object sender, EventArgs e) { client.CancelAsync(); } private void btnBrowse_Click(object sender, EventArgs e) { using(FolderBrowserDialog fbd = new FolderBrowserDialog() { Description = "Select your path." }) { if (fbd.ShowDialog() == DialogResult.OK) { txtPath.Text = fbd.SelectedPath; Properties.Settings.Default.Path = txtPath.Text; Properties.Settings.Default.Save(); } } } WebClient client; public string Url { get; set; } public string FileName { get; set; } public double FileSize { get; set; } public double Percentage { get; set; } private frmMain _frmMain; private void frmDownload_Load(object sender, EventArgs e) { client = new WebClient(); client.DownloadProgressChanged += Client_DownloadProgressChanged; client.DownloadFileCompleted += Client_DownloadFileCompleted; txtAddress.Text = Url; txtPath.Text = Properties.Settings.Default.Path; } private void Client_DownloadFileCompleted(object sender, AsyncCompletedEventArgs e) { //Save download information to dataset Database.FilesRow row = App.DB.Files.NewFilesRow(); row.Url = Url; row.FileName = FileName; row.FileSize = (string.Format("{0:0.##} KB", FileSize / 1024)); row.DateTime = DateTime.Now; App.DB.Files.AddFilesRow(row); App.DB.AcceptChanges(); App.DB.WriteXml(string.Format("{0}/data.dat", Application.StartupPath)); ListViewItem item = new ListViewItem(row.Id.ToString()); item.SubItems.Add(row.Url); item.SubItems.Add(row.FileName); item.SubItems.Add(row.FileSize); item.SubItems.Add(row.DateTime.ToLongDateString()); _frmMain.listView1.Items.Add(item); this.Close(); } private void Client_DownloadProgressChanged(object sender, DownloadProgressChangedEventArgs e) { //Update progress bar progressBar.Minimum = 0; double receive = double.Parse(e.BytesReceived.ToString()); FileSize = double.Parse(e.TotalBytesToReceive.ToString()); Percentage = receive / FileSize * 100; lblStatus.Text = $"Downloaded {string.Format("{0:0.##} %", Percentage)}"; progressBar.Value = int.Parse(Math.Truncate(Percentage).ToString()); progressBar.Update(); } } }
Add code to handle frmMain form
namespace DownloadManager { public partial class frmMain : Form { public frmMain() { InitializeComponent(); } private void tsSetting_Click(object sender, EventArgs e) { using(frmSetting frm = new frmSetting()) { frm.ShowDialog(); } } private void tsAddUrl_Click(object sender, EventArgs e) { using(frmAddUrl frm = new frmAddUrl()) { if(frm.ShowDialog() == DialogResult.OK) { frmDownload frmDownload = new frmDownload(this); frmDownload.Url = frm.Url; frmDownload.Show(); } } } private void tsRemove_Click(object sender, EventArgs e) { if(MessageBox.Show("Are you sure want to delete this record ?", "Message", MessageBoxButtons.YesNo, MessageBoxIcon.Question) == DialogResult.Yes) { for(int i = listView1.SelectedItems.Count; i > 0; i--) { ListViewItem item = listView1.SelectedItems[i - 1]; App.DB.Files.Rows[item.Index].Delete(); listView1.Items[item.Index].Remove(); } //Save dataset to file App.DB.AcceptChanges(); App.DB.WriteXml(string.Format("{0}/data.dat", Application.StartupPath)); } } private void frmMain_Load(object sender, EventArgs e) { //Load data from file to dataset string fileName = string.Format("{0}/data.dat", Application.StartupPath); if (File.Exists(fileName)) App.DB.ReadXml(fileName); foreach(Database.FilesRow row in App.DB.Files) { ListViewItem item = new ListViewItem(row.Id.ToString()); item.SubItems.Add(row.Url); item.SubItems.Add(row.FileName); item.SubItems.Add(row.FileSize); item.SubItems.Add(row.DateTime.ToLongDateString()); listView1.Items.Add(item); } } } }
VIDEO TUTORIALS
Categories
Popular Posts
Material Lite Admin Template
11/14/2024
Freedash bootstrap lite
11/13/2024
RuangAdmin Template
11/17/2024
Responsive Animated Login Form
11/11/2024