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