2016-09-27 3 views
1

내 응용 프로그램을 C#에서 직렬 포트를 새로 고칠 수있게 만들고 싶습니다. 포트 목록 (ComboBox에서)이 비어 있는데 refresh 버튼을 누르면 완전히 작동하고 활성 포트 목록이 표시됩니다. 하지만 내가 Serial Port의 연결을 끊었을 때 refresh 버튼을 누르면 실제로 직렬 포트가 연결되어 있지 않기 때문에 포트 목록 (Combobox에서)이 비어 있어야합니다. 어떻게하면 refresh 버튼을 눌렀을 때 연결이 끊어 지는지 확인하는 방법, 우리는 모든 포트 목록을 (콤보 박스에서) 비어있게 만들까요?C# 직렬 포트를 새로 고치는 방법 #

public void SetPortNameValues(object obj) 
    { 
     foreach (string str in SerialPort.GetPortNames()) 
     { 
      ((ComboBox)obj).Items.Add(str); 
     } 
    } 

내 expetation은 다음과 같습니다 :

1. i connect serial port 2. i run my app 3. i disconnect serial port 4. i hit refresh 5. final result is port list empty in combobox

도움에 대한 감사와이 setportnamevalues에 내 코드

private void button2_Click_2(object sender, EventArgs e) 
{ 
    if(String.IsNullOrEmpty(cboPort.Text)) 
    { 
     comm.SetPortNameValues(cboPort); 

     for (int i = 0; i < cboPort.Items.Count; i++) 
     { 
      string value = cboPort.GetItemText(cboPort.Items[i]); 

      if (String.IsNullOrEmpty(value)) 
      { 
       string a = cboPort.SelectedIndex.ToString(); 
       return; 
      } 
      else 
      { 
       cboPort.SelectedIndex = 0; 
      } 
     } 
    } 
    else if ((cboPort.Text) != " " && cboPort.SelectedIndex == -1) 
    { 
      cboPort.Text = " "; 
      return; 
    } 
} 

입니다 :

이 새로 고침 버튼 내 코드입니다 응답, 나는 여전히 C#에서 새로운입니다. 인사말!

답변

0

i 마지막으로 답을 얻으십시오. 버튼 액션 여기에 수정에

public void SetPortNameValues(object obj) 
    { 
     string[] ports = SerialPort.GetPortNames(); // load all name of com ports to string 
     ((ComboBox)obj).Items.Clear(); //delete previous names in combobox items 

     foreach (string port in ports) //add this names to comboboxPort items 
     { 
      ((ComboBox)obj).Items.Add(port); //if there are some com ports ,select first 
     } 
     if (((ComboBox)obj).Items.Count > 0) 
     { 
      ((ComboBox)obj).SelectedIndex = 0; 
     } 
     else 
     { 
      ((ComboBox)obj).Text = " "; //if there are no com ports ,write Empty 
     } 
    } 

:

이 setportnamevalues의 수정이다

private void button2_Click_2(object sender, EventArgs e) 
    { 
     comm.SetPortNameValues(cboPort); 
    } 

그래, 마지막으로 내가 원하는 것을 얻을.