1

デフォルトのブラウザでURLを開く方法を理解するのを手伝ってくれたので、クリックすると2つの異なるタブでURLを開くという問題が少しあります。これの原因は何ですか?

編集: 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());
    }
}
4

1 に答える 1

3

ある人が提案したように、私はそのトリックを行った記事にアクセスしましたが、次のように機能します。

    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();
        }
    }
于 2011-12-20T21:24:26.077 に答える