2013-11-26 3 views
1

두 단어에서 이전 선택 항목을 다시 선택하지 않고 또는 SelectedIndexChanged 메서드를 트리거하지 않고 반환하려고합니다.Combobox SelectedIndexChanged가 트리거하는 것을 방지하려면 어떻게해야합니까?

이 상황은 다음과 같습니다. 콤보 상자가 있고 항목을 선택하면 datagridview가 행으로 채워집니다. 당신은 datagridview에서 사물을 편집하고 파일에 저장할 수 있습니다. 변경 사항을 저장하지 않고 콤보 상자에서 항목을 변경하려고하면 모든 변경 사항이 손실됩니다. 나는 예 (변경)와 아니오 (변경하지 않음) 중 하나를 선택할 수 있도록 메시지 상자를 만듭니다. 예를 클릭하면 모든 것이 정상이지만 아니오를 클릭하면 이전에 선택한 항목을 반환해야합니다. 그렇게하면 SelectedIndexChanged가 트리거되고 DataGridview가 다시로드되고 변경 사항이 삭제됩니다. 다음은 SelectedIndexChanged 메서드의 코드입니다.

if (!ChangeMade) 
     { 
      //#1 Some Code 
     } 
else 
     { 
      DialogResult dialogResult = 
      MessageBox.Show("Are you sure you want to change the manifacturer?" + 
          "\n All the changes you have done will be lost.", 
      "Warning", MessageBoxButtons.YesNo); 

      if (dialogResult == DialogResult.Yes) 
      { 
       //same code as #1     
      } 
      else 
      { 
       //Here must be the code that returns the previous 
       //item without selecting it. 
      } 

죄송합니다.

답변

3

사용자가 콤보 상자를 변경할 때만 데이터를 변경하려고합니다. 이 시나리오의 경우 사용자가 combobox을 변경할 때만 트리거되기 때문에 SelectionChangeCommitted은 완벽합니다. MSDN

+0

분명히 더 나은 해결책입니다. 다행스럽게 생각합니다. 감사! – Dethariel

+0

답변 해 주셔서 감사합니다. 나는 당신과 데 메타 엘의 대답을 시도합니다. 그들은 둘 다 일하고있다 그러나 나는 너의 것을 잘 생각한다. – Georgi

-1
this.comboBox1.SelectedIndexChanged -= new EventHandler(comboBox1_SelectedIndexChanged); 
+0

... ... 뭐 ??? – zey

0

나는이 작업을 수행하는 방법에

private void TypeSelectionChangeCommitted(object sender, EventArgs e) 
{ 
    if (!ChangeMade) 
    { 
     //#1 Some Code 
    } 
    else 
    { 
     DialogResult dialogResult = 
     MessageBox.Show("Are you sure you want to change the manifacturer?" + 
         "\n All the changes you have done will be lost.", 
     "Warning", MessageBoxButtons.YesNo); 

     if (dialogResult == DialogResult.Yes) 
     { 
      //same code as #1     
     } 
     else 
     { 
      //Here must be the code that returns the previous 
      //item without selecting it. 
     } 
    } 
} 

상세 정보 :

private void ComboBoxOnChange(...) 
{ 
    if (!shouldTrigger) 
     return; 

    shouldTrigger = true; 
    // Here goes your code 
    should trigger = false; 
} 
관련 문제