Windows Forms: Internet Download Manager in C# Part 2
By Tan Lee Published on May 22, 2017 10.3K
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
Gentella Admin Template
Nov 14, 2024
11 Things You Didn't Know About Cloudflare
Dec 19, 2024
Horizon MUI Admin Dashboard Template
Nov 18, 2024
Modular Admin Template
Nov 14, 2024