2012-09-17 3 views
0

Ниже приведен код, с которым я работаю около двух недель, и подумал, что он работает до тех пор, пока я не добавлю последнюю информацию (Class MyClient), и теперь я получение ошибки win32 в Process.Start (url); Указывает, что указанный файл не найден. Я попытался настроить его на "iexplorer.exe", чтобы загрузить IE для URL-адреса, но никаких изменений.Process.Start бросает исключение win32 для списка Combobox

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; } 
} 

}

ответ

2

Вы используете ClientName как URL, который не является правильным ...

string url = c.ClientName; 

... должно быть ...

string url = c.UrlAddress; 

Вы также не должны указывать iexplorer.exe. По умолчанию открытые URL-адреса ОС с веб-браузером по умолчанию. Если вам действительно не нужны ваши пользователи, использующие Internet Explorer, я предлагаю вам позволить системе выбрать браузер для вас.

UPDATE
В откоса на комментарий OP в ...

Это зависит от того, что вы подразумеваете под "пустым". Если вы имеете в виду null, это невозможно. Используя null, поскольку первая запись в вашем списке приведет к исключению NullReferenceException при попытке вызвать c.UrlAddress. Вы можете быть в состоянии использовать экземпляр местоблюстителя 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 
    } 
} 
+0

Спасибо , не могу поверить, что я пропустил такую ​​простую ошибку – user1666884

+0

На стороне примечания, считаете ли вы, что это возможно на основе приведенного выше кода, чтобы вставить пробел для первой записи combobox, чтобы он не загружал URL-адрес? – user1666884

+0

@ user1666884 - См. Обновление моего ответа. –

Смежные вопросы