2013-12-11 159 views
2

我有3個單選按鈕全部保存在一個groupbox內(所以每次只能標記1個)。我有我的代碼工作,但爲更快地更新我的標籤,我想停止選擇新的radioButton時調用兩次函數。例如,在我的代碼中,我的默認值是rb1,然後單擊rb2,rb1 CheckedChanged事件觸發並更新標籤,然後rb2的CheckedChanged事件觸發並再次更新標籤(相同的值)。停止使用radioButton CheckedChanged事件的雙重調用功能?

什麼是最好的方式添加一些額外的標準,如果標籤已更新一次,然後停止函數被再次調用?

CODE:

private void rb1_CheckedChanged(object sender, EventArgs e) 
    { 
     if (cmbLetterType.Text.Length != 0) 
     { 
      updatePrintedCntLabel(); 
     } 
    } 

private void rb2_CheckedChanged(object sender, EventArgs e) 
{ 
    if (cmbLetterType.Text.Length != 0) 
    { 
     updatePrintedCntLabel(); 
    } 
} 

private void rb3_CheckedChanged(object sender, EventArgs e) 
{ 
    if (cmbLetterType.Text.Length != 0) 
    { 
     updatePrintedCntLabel(); 
    } 
} 

編輯:爲了澄清,這是一個C#WinForms應用程序,我在做這個

回答

2

更改條件:

if (cmbLetterType.Text.Length != 0 && rb1.Checked) 

待辦事項這也適用於其他2個處理程序(使用rb2.Checked和rb3.Checked),並且每個人只會在它變成c時觸發hecked,而不是未檢查

+0

見,這是奇怪的事情。原本我嘗試過。我已經測試並確認在rb1的checkedChanged事件觸發時,它的值已經變爲false。因此,在checkedChanged事件中檢查它是否已檢查並且我的組合框長度將不會完全根據條件進行評估。 –

+1

在這種情況下新檢查的項目的事件處理程序是否仍不能正常工作?您所需的代碼仍應運行一次。 – Baldrick

+0

啊,你說得對。似乎在我的測試過程中,我對所有不同的標準感到有些慌亂,當我通過斷點檢查這個問題時,我還沒有設置cmbLetterType的值。謝謝! –

0

事件在做什麼,告訴他們做

如果你不想兩次更新標籤,然後不
簡單,如果該值沒有改變,那麼請不要更新
保存值並測試更改

爲什麼你有三個相同的事件處理程序?
您可以將多個事件連接到同一個處理程序。

即使您使用Baldrick的方法,您也可以從發件人處獲得按鈕。

上的WinForm

晚期標記,但仍可以使用相同的方法(如果(labelVal =值)回報;)
在一般使用的公共屬性

private string labelVal = string.empty; 

public string LabelVal 
{ 
    get { return labelVal; } 
    set 
    { 
     if (labelVal = value) return; 
     labelVal = value; 
     NotifyPropertyChanged("LableVal"); 
    } 
} 
4

考慮這個

public class Form1 : Form 
{ 


    public Form1() 
    { 
     rb1.CheckedChanged += rb_CheckedChanged; 
     rb2.CheckedChanged += rb_CheckedChanged; 
     rb3.CheckedChanged += rb_CheckedChanged; 
    } 

    private void rb_CheckedChanged(object sender, EventArgs e) 
    { 

     if (!((Radiobutton)sender).Checked) return; 

     if (cmbLetterType.Text.Length != 0) 
     { 
      updatePrintedCntLabel(); 
     } 

    } 
}