2013-02-18 10 views
0

두 항목이있는 콤보 상자가 있습니다. 또한 이러한 항목 중 하나를 선택하면 새 양식을 여는 단추가 있습니다. 그러나 항목을 선택하지 않으면 예외 (nullpointer)가 있습니다. 나는이 예외를 잡으려고 노력했고 (아무 소용이 없어도) 사용자에게 항목 중 하나를 선택하라는 메시지를 표시하는 mbox를 보여줍니다.C에서 예외 잡기 문제 #

if (labelGrid.Text == "Member" && cbTable.SelectedItem.ToString().Equals("Workout")) 
     { 
      string name; 
      string ss; 
      foreach (DataGridViewRow item in this.dtGrid1.SelectedRows) 
      { 
       ss = dtGrid1.CurrentCell.Value.ToString(); 
       name = dtGrid1.SelectedCells[1].Value.ToString(); 
       BookMemberWorkout bmw = new BookMemberWorkout(ss, name); 
       bmw.Label2.Text = ss; 
       bmw.Label1.Text = name; 
       bmw.ShowDialog(); 
      } 
     } 
+5

나는 try-catch 블록이 보이지 않으므로 어떻게 그 예외를 잡으려고합니까? –

답변

2

이 아닌 예외적 인 경우에 흐름 제어에 대한 예외를 사용 안됩니다 여기

심지어는 버튼 클릭에 대한 코드입니다. 사용자가 아무 것도 선택하지 않은 경우도 예외는 아닙니다.

올바른 방법은 간단 null 확인 될 것이다 :


if(cbTable.SelectedItem == null) 
{ 
    // Show message box 
} 
else 
{ 
    // Your current code 
} 
당신의 예외 처리 코드가 귀하의 질문에 당신이 그것을 포함하지 않았기 때문에, 대답하는 것은 불가능 작동하지 않는 이유는.) (

ss = dtGrid1.CurrentCell.Value.ToString(); 

당신은 값이 null이 아닌 확신 할 수 없다, 그래서 당신은로 .toString를 호출하기 전에 확인해야합니다 :

0

나는 문제가 줄 생각합니다.

메시지 상자를 사용하는 대신 쓸모없는 포스트 백을 피하면서 Javascript 유효성 검사를 수행하기 위해 RequiredValidator를 사용할 수 있습니다.

성능과 가독성 시점보기에서
0

당신은 할 수 있습니다, 나는 콤보 상자에서 선택한 값을 확인하는 것이 좋습니다 것보다는 그러나 특정 쿼리에 응답이

if(cbTable.SelectedItem == null) 
{ 
     MessageBox.Show("Please select a value in the combo box."); 
     return; 
} 

if (labelGrid.Text == "Member" && cbTable.SelectedItem.ToString().Equals("Workout")) 
     { 
      string name; 
      string ss; 
      foreach (DataGridViewRow item in this.dtGrid1.SelectedRows) 
      { 
       ss = dtGrid1.CurrentCell.Value.ToString(); 
       name = dtGrid1.SelectedCells[1].Value.ToString(); 
       BookMemberWorkout bmw = new BookMemberWorkout(ss, name); 
       bmw.Label2.Text = ss; 
       bmw.Label1.Text = name; 
       bmw.ShowDialog(); 
      } 
     } 

같은 예외를 잡기 catch NullReferenceException like this :

try{ 
     if (labelGrid.Text == "Member" && cbTable.SelectedItem.ToString().Equals("Workout")) 
     { 
      string name; 
      string ss; 
      foreach (DataGridViewRow item in this.dtGrid1.SelectedRows) 
      { 
       ss = dtGrid1.CurrentCell.Value.ToString(); 
       name = dtGrid1.SelectedCells[1].Value.ToString(); 
       BookMemberWorkout bmw = new BookMemberWorkout(ss, name); 
       bmw.Label2.Text = ss; 
       bmw.Label1.Text = name; 
       bmw.ShowDialog(); 
      } 
     } 
    } 
    catch(NullReferenceException ex) 
    { 
     MessageBox.Show("Please select a value in the combo box."); 
    } 
+0

내가 잘못한 것은 NullReferenceException 대신 "일반적인"예외를 잡으려고 시도한 것입니다. –

+0

try 블록의 코드 일부가 null ref 예외를 throw 할 수 있기 때문에 null 참조 예외도 이상적인 솔루션이 아닙니다. 옆에서, 약간 날짜가되었지만, 나는 이것이 매우 도움이된다는 것을 발견했다 : http://mikevallotton.wordpress.com/2009/07/08/net-exceptions-all-of-them/ – bytefire