Я делаю простой браузер в Visual Studio.
Чтобы иметь возможность сохранять и удалять закладки, я использую следующие коды:
Когда откроется frmFavor, он прочитает xml-файл с именем Favorites.xml
private void frmFavorites_Load(object sender, EventArgs e) {
System.Xml.XmlDocument loadDoc = new System.Xml.XmlDocument();
loadDoc.Load(Application.StartupPath + "\\Favorites.xml");
foreach (System.Xml.XmlNode favNode in loadDoc.SelectNodes("/Favorites/Item")) {
listViewFavs.Items.Add(favNode.Attributes["url"].InnerText);
}
}
Когда форма снова закрывается, она перезаписывает xml-файл и сохраняет все оставшиеся элементы в xml-файле
private void frmFavorites_FormClosing(object sender, FormClosingEventArgs e) {
System.Xml.XmlTextWriter writer = new System.Xml.XmlTextWriter(Application.StartupPath + "\\Favorites.xml", null);
writer.WriteStartElement("Favorites");
for (int i = 0 ; i < listViewFavs.Items.Count ; i++) {
writer.WriteStartElement("Item");
writer.WriteAttributeString("url", listViewFavs.Items[i].Text);
writer.WriteEndElement();
}
writer.WriteEndElement();
writer.Close();
}
Чтобы добавить и удалить закладку, я использую этот код:
private void btnAddFav_Click(object sender, EventArgs e) {
ListViewItem item = new ListViewItem(txtURL.Text);
listViewFavs.Items.Add(txtURL.Text);
}
private void btnDelFav_Click(object sender, EventArgs e) {
try {
listViewFavs.Items.RemoveAt(listViewFavs.SelectedIndices[0]);
}
catch {
MessageBox.Show("Je moet een item selecteren", "Geen item geselecteerd", MessageBoxButtons.OK, MessageBoxIcon.Warning);
}
}
Теперь моя проблема:
Я хотел бы дать моим пользователям возможность дважды щелкнуть элемент, чтобы они могли перейти к своему сохраненному фавору. По крайней мере, это то, что ДОЛЖНО случиться.
До сих пор я пробовал несколько кодов и получил следующее:
private void listViewFavs_DoubleClick(object sender, EventArgs e) {
try {
FrmMain Main = new FrmMain();
Main.navigate(listViewFavs.SelectedItems[0].Text);
}
catch {
MessageBox.Show("Je moet een item selecteren", "Geen item geselecteerd", MessageBoxButtons.OK, MessageBoxIcon.Warning);
}
}
frmMain - это мой браузер, а навигация - это публичный метод, который я использую для проверки URL и навигации.
Для навигации я использую этот код:
public void navigate(String URL) {
if (String.IsNullOrEmpty(URL) || URL.Equals("about:blank")) {
GetActiveBrowser().DocumentText = Properties.Resources.FirstTime; // this is a HTML-doc you also see when you open the browser for the 1st time
txtURL.Text = "about:blank";
return;
} else if (!URL.StartsWith("http://") && !URL.StartsWith("https://") && !URL.StartsWith("file://") && !URL.StartsWith("ftp://"))
URL = "http://" + URL;
try {
GetActiveTab().Text = "... Loading ...";
this.Icon = Properties.Resources.loading1;
GetActiveBrowser().Navigate(new Uri(URL));
}
catch (System.UriFormatException) {
MessageBox.Show("'" + URL + "' is geen geldige URL", "Ongeldige URL", MessageBoxButtons.OK, MessageBoxIcon.Error);
}
} // go to URL
Как видите, я использую GetActiveTab () и GetActiveBrowser:
private WebBrowser GetActiveBrowser() {
return (WebBrowser)tabs.SelectedTab.Controls[0];
}
private TabPage GetActiveTab() {
return tabs.SelectedTab;
}
Что на самом деле происходит:
Я дважды щелкаю по пункту
Ничего не происходит -.- Нет навигации, нет ошибок, нет ничего
У кого-нибудь есть идея решить эту проблему?
Я ценю любую помощь, оказанную.