Windows Forms: Internet Download Manager in C# Part 2
By Tan Lee Published on May 22, 2017 10.6K
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
Structured Data using FoxLearn.JsonLd
Jun 20, 2025
Implement security headers for an ASP.NET Core
Jun 24, 2025
10 Common Mistakes ASP.NET Developers Should Avoid
Dec 16, 2024
HTML Bootstrap 4 Login, Register & Reset Template
Nov 11, 2024