Witam.
Mam problem z obsłużeniem wyjątku występującego po odświeżeniu listy w comboBox(Windows Forms, C++/CLI, VS2010).
Schemat działania jest następujący:
- przy starcie aplikacji w Form1_Load wyszukiwane są dostępne porty COM i dopisywane na listę comboBox,
dodatkowo jeżeli lista nie jest pusta SelectedIndex jest ustawiany na 0, - podczas pracy aplikacji mamy możliwość odświeżenia listy portów, tutaj używam comboBox_KeyDown przy czym
najpierw cała lista jest czyszczona, a dopiero potem następuje wyszukanie i uzupełnienie nowymi wartościami,
tutaj również sprawdzam czy lista nie jest pusta i ustawiam wartość początkową na 0:
if(comboBox1->Items->Count > 0){
comboBox1->SelectedIndex = 0;}
else {comboBox1->SelectedIndex = -1;}
problem w tym, że jeśli lista comboBox po ponownym wyszukaniu będzie pusta to pomimo ustawienia wartości początkowej aplikacja kończy działanie zgłaszając wyjątek:
An unhandled exception of type 'System.ArgumentOutOfRangeException' occurred in System.Windows.Forms.dll
Additional information: InvalidArgument=Wartość '0' nie jest prawidłową wartością dla 'index'.
O ile zgłaszany błąd jest dla mnie zrozumiały to nie rozumiem skąd się on bierze... i tutaj proszę o pomoc.
Ewentualnie jak ten wyjątek przechwycić i obsłużyć na tyle żeby aplikacja nie zakończyła działania.
Poniżej część kodu aplikacji:
void RefreshPortsList(){
comboBox1->Items->Clear();//czyszczenie listy
//----------------- WYSZUKIWANIE PORTÓW -------------------------
for (int com=0;com<256;com++){
//tu następuje wyszukanie i uzupełnienie listy comboBox1
...
comboBox1->Items->Add(numer_portu);
}
if(comboBox1->Items->Count > 0){
comboBox1->SelectedIndex = 0;}//ustawienie wartości początkowej
else {comboBox1->SelectedIndex = -1;}
}
private: System::Void Form1_Load(System::Object^ sender, System::EventArgs^ e) {
RefreshPortsList();
}
private: System::Void comboBox1_KeyDown(System::Object^ sender, System::Windows::Forms::KeyEventArgs^ e) {
if ( e->KeyCode == Keys::F5){
RefreshPortsList();}
}