2014-10-05 99 views
0

我开发了一个web浏览器以及一个自定义地址栏(combobox)。我使用my.settings保存了用户浏览器在该组合框中的所有历史记录。这是我的问题。为了使其正确,我在每个站点前加“http://”。我确实正确处理https,它只有在地址前没有输入任何内容时,我用http前缀。我能够保存历史记录就好,我的问题是它创建一个副本,因为http是由用户输入的,因此“http://cnn.com”位于历史记录列表中,但cnn.com不是这样,当用户输入cnn.com时它看到它是新的并且附加http://cnn.com到列表中,并且它是一个dup。下面是我的if语句:第一行是我试着说如果这个网站已经存在,不要添加它,只需浏览它。vb.net webbrowser if语句

Private Sub btncustomsite_Click(sender As Object, e As EventArgs) Handles btncustomsite.Click 
     If ComboBox1.Items.Contains(ComboBox1.Text) Then 
      WebBrowser1.Navigate(ComboBox1.Text) 
     ElseIf ComboBox1.Text = "" Then 
      MsgBox("ENTER A WEBSITE ADDRESS", , "Warning") 
      ComboBox1.Focus() 
      Exit Sub 
     ElseIf ComboBox1.Text.StartsWith("https") Then 
      ComboBox1.Items.Add(ComboBox1.Text) 
      WebBrowser1.Navigate(ComboBox1.Text) 
     ElseIf ComboBox1.Text.StartsWith("http") Then 
      ComboBox1.Items.Add(ComboBox1.Text) 
      WebBrowser1.Navigate(ComboBox1.Text) 
     ElseIf Not ComboBox1.Text.StartsWith("http") Then 
      ComboBox1.Text = "http://" + ComboBox1.Text 
      ComboBox1.Items.Add(ComboBox1.Text) 
      WebBrowser1.Navigate(ComboBox1.Text) 
     ElseIf Not ComboBox1.Text.EndsWith(".com") Then 
      WebBrowser1.Navigate("google.com") 
      WaitForPageLoad() 
      SendKeys.Send(ComboBox1.Text) 
      SendKeys.Send("{ENTER}") 
     Else 
      ComboBox1.Text = "http://" + ComboBox1.Text 
      ComboBox1.Items.Add("http://" + ComboBox1.Text) 
      WebBrowser1.Navigate(ComboBox1.Text) 
     End If 
    End Sub 
+0

您的代码正在这样做 - 在执行您所描述的“cnn”时,使用断点进行调试很容易。 “Else”块应该在添加之前检查列表中是否存在新文本 – Plutonix 2014-10-05 11:31:34

+0

ahhhhhh我是多么愚蠢。谢谢。通过阅读你的消息来想出它。我应该寻找“http://”+“”+ Combobox1.text – 2014-10-05 11:34:26

+0

是的,那工作。谢谢。你想将其设置为答案,以便我可以标记它? – 2014-10-05 11:36:12

回答

1

该位是有缺陷的:

Else 
    ComboBox1.Text = "http://" + ComboBox1.Text 
    ComboBox1.Items.Add("http://" + ComboBox1.Text) 
    WebBrowser1.Navigate(ComboBox1.Text) 

你想是这样的:

Else 
    Dim tmp As String = "http://" & ComboBox1.Text 
    ' only add if the new text is not there 
    If ComboBox1.Items.Contains(tmp) = False Then ComboBox1.Items.Add(tmp) 
    ComboBox1.Text = tmp 
    WebBrowser1.Navigate(ComboBox1.Text) 

你也能设置在程序开始断点;然后执行cnn中描述的步骤来观察发生了什么

+0

谢谢我认为我会采纳您的建议并声明一个变量并使用它。 – 2014-10-05 11:53:22

+0

因为它使用相同的字符串2ce使用var可以防止错字(测试一个版本,添加另一个版本)。当您忘记更新所有存在的位置时,会发生很多复制粘贴代码。另外,'&'是字符串连接的首选运算符。 – Plutonix 2014-10-05 11:57:28

+0

好的,再次感谢! – 2014-10-05 11:58:23