Process.Start为Combobox列表抛出win32异常

时间:2012-09-17 19:25:26

标签: c# process.start

下面是我已经使用了大约两个星期的代码,并且认为我已经工作直到我输入最后的信息(类MyClient),现在我在Process.Start上遇到了win32错误( URL); 说无法找到指定的文件。我已经尝试将其设置为“iexplorer.exe”以使其为URL加载IE,但没有更改。

public partial class Form1 : Form
{
    List<MyClient> clients;
    public Form1()
    {
        InitializeComponent();
        clients = new List<MyClient>();
        clients.Add(new MyClient { ClientName = "Client 1", UrlAddress = @"http://www.google.com" });
        BindBigClientsList();
    }

    private void BindBigClientsList()
    {
        BigClientsList.DataSource = clients;
        BigClientsList.DisplayMember = "ClientName";
        BigClientsList.ValueMember = "UrlAddress";
    }

    private void BigClientsList_SelectedIndexChanged(object sender, EventArgs e)
    {
        MyClient c = BigClientsList.SelectedItem as MyClient;
        if (c != null)
        {
            string url = c.ClientName;
            Process.Start("iexplorer.exe",url);
        }
    }
}
class MyClient
{
    public string ClientName { get; set; }
    public string UrlAddress { get; set; }
}

}

1 个答案:

答案 0 :(得分:2)

您使用ClientName作为网址,这是不正确的......

string url = c.ClientName;

......应该......

string url = c.UrlAddress;

您也不应指定iexplorer.exe。默认情况下,OS使用默认Web浏览器打开URL。除非您确实需要使用Internet Explorer的用户,否则我建议您让系统为您选择浏览器。

<强>更新
回到OP的评论......

这取决于你所说的“空白”。如果您的意思是null,那么这是不可能的。当您尝试调用null时,使用c.UrlAddress作为列表中的第一个条目将导致NullReferenceException。您可以使用具有虚拟值的占位符MyClient实例...

clients = new List<MyClient>();
clients.Add(new MyClient { ClientName = "", UrlAddress = null });
clients.Add(new MyClient { ClientName = "Client 1", UrlAddress = @"http://www.google.com" });

但是你必须将你的行动方法改为这样......

private void BigClientsList_SelectedIndexChanged(object sender, EventArgs e)
{
    MyClient c = BigClientsList.SelectedItem as MyClient;
    if (c != null && !String.IsNullOrWhiteSpace(c.UrlAddress))
    {
        string url = c.ClientName;
        Process.Start("iexplorer.exe",url);
    }
    else
    {
        // do something different if they select a list item without a Client instance or URL
    }
}