下面是我已经使用了大约两个星期的代码,并且认为我已经工作直到我输入最后的信息(类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; }
}
}
答案 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
}
}