2011-12-20 14 views
1

人としてhelped me既定のブラウザで開かれたURLを開始する方法を今私はクリックしたときに2つの異なるタブでURLを開く原因となる少しの問題があります。これの原因は何でしょうか?私のコードは2つの異なるタブでURLを開きますが、なぜですか?

EDIT:詳細モードでListViewを使用していることを指摘しておきましょう。したがって、ユーザーがURLで列をクリックすると、ブラウザ内に単一のウィンドウが開きます。

lvWeb.MouseMove += new MouseEventHandler(lvWeb_MouseMove); 
lvWeb.MouseUp +=new MouseEventHandler(lvWeb_MouseUp); 

private void lvWeb_MouseMove(object sender, MouseEventArgs e) 
{ 
    var hit = lvWeb.HitTest(e.Location); 
    if (hit.SubItem != null && hit.SubItem == hit.Item.SubItems[1]) 
     lvWeb.Cursor = Cursors.Hand; 
    else lvWeb.Cursor = Cursors.Default; 
} 

private void lvWeb_MouseUp(object sender, MouseEventArgs e) 
{ 
    var hit = lvWeb.HitTest(e.Location); 
    if (hit.SubItem != null && hit.SubItem == hit.Item.SubItems[1]) 
    { 
     var url = new Uri(hit.SubItem.Text); 
     System.Diagnostics.Process.Start(url.ToString()); 
    } 
} 
+0

あなたは多分二回 'MouseUp'イベントハンドラを登録しましたか? – Joey

+0

@ジョイ、いいえ、私は一度だけ持っています。 – HelpNeeder

+1

あなたの答えは正確ではありませんが、見る価値があります:http://ryanfarley.com/blog/archive/2004/05/16/649.aspx。現在のセッションをハイジャックすることなく、デフォルトのブラウザを開く別の方法について説明します。 – robasta

答えて

3

1人が推薦したように、私はトリックをしたarticleを訪問してきたし、それは次のように動作します。

private string getDefaultBrowser() 
    { 
     string browser = string.Empty; 
     RegistryKey key = null; 
     try 
     { 
      key = Registry.ClassesRoot.OpenSubKey(@"HTTP\shell\open\command", false); 

      //trim off quotes 
      browser = key.GetValue(null).ToString().ToLower().Replace("\"", ""); 
      if (!browser.EndsWith("exe")) 
      { 
       //get rid of everything after the ".exe" 
       browser = browser.Substring(0, browser.LastIndexOf(".exe") + 4); 
      } 
     } 
     finally 
     { 
      if (key != null) key.Close(); 
     } 
     return browser; 
    } 

    private void lvWeb_MouseUp(object sender, MouseEventArgs e) 
    { 
     var hit = lvWeb.HitTest(e.Location); 
     if (hit.SubItem != null && hit.SubItem == hit.Item.SubItems[1]) 
     { 
      var url = new Uri(hit.SubItem.Text); 
      //System.Diagnostics.Process.Start(url.ToString()); 

      Process p = new Process(); 
      p.StartInfo.FileName = getDefaultBrowser(); 
      p.StartInfo.Arguments = url.ToString(); 
      p.Start(); 
     } 
    } 
関連する問題