2013-01-21 18 views
0

我有幾個TextBoxes綁定到單個CheckBox顯示一個MessageBox可以防止IsChecked射擊

這是與它相關的邏輯:

  • 如果Checkbox被選中,將覆蓋在相關TextBoxes任何現有文本,並使其「0」 ++
  • 如果所有的TextBoxes得分爲'0',CheckBox應該 被禁用和檢查。
  • 如果TextBoxes中的任何一個從「0」變爲「0」,它將變爲啓用和未選中 。

++ * 注:*需要說明的是如果該TextBox具有 'C.' 的值

好的,所以我遇到的問題是執行上面的警告時,其中一個相關的TextBoxes具有'C.'值。我想要發生的是循環通過TextBoxes並檢查是否有得分'C.'。如果找到一個,則向用戶顯示一條警告消息,確認是否要繼續。如果選擇是,則所有相關分數將被覆蓋爲'0'。如果選擇否,則應取消Checked事件。

爲了達到這個目的,我爲CheckBox.PreviewMouseDownCheckBox.Checked事件添加了Event Listeners。這裏是我的CheckBox.PreviewMouseDown事件偵聽器的代碼:

private void NormalCheckBoxControl_PreviewMouseDown(object sender, MouseButtonEventArgs e) 
{ 
    CheckBox normalCheckBox = (CheckBox)sender; 
    bool showCorrespondingScoreWarningMsg = false; 

    //Get a Row to loop through the AssociatedAdqScore controls for each 
    ScoreControl tempScoreControl = new ScoreControl(); 

    foreach (ScoreControl score in this.ScoreControlList) 
    { 
     if (score.ScoreTextBox.Text == "C") 
     { 
      showCorrespondingScoreWarningMsg = true; 
     } 
    } 

    if (showCorrespondingScoreWarningMsg) 
    { 
     MessageBoxResult msgResult = InformationBox.Show("WARNING: Proceeding will remove corresponding 'C' scores. Continue?", "Continue?", ButtonStyle.YesNo, IconStyle.Question); 

     if (msgResult == MessageBoxResult.No) 
     { 
      e.Handled = true; 
     } 
    } 
} 

這工作如果用戶選擇「否」,但我遇到的問題是,當選擇「是的,」 CheckBox.Checked事件仍然沒有被解僱。我試圖手動設置CheckBox.IsChecked = true;如果if (msgResult == MessageBoxResult.Yes),但這打破了綁定,所以這不是一個可行的解決方案。

如果用戶選擇「是?」,有什麼辦法可以解決此問題並繼續執行NormalCheckBoxControl_Checked(object sender, RoutedEventArgs e)事件?

+0

爲什麼不將'CheckBox'的'IsChecked'屬性綁定到一個屬性?這樣,當您將「CheckBox.IsChecked」綁定到屬性時,只需在「TextBox」條件匹配所需條件時更改屬性,並且在更改屬性時它會自動檢查/取消選中「CheckBox」 。 –

回答

1

我不知道「Checked」事件,儘管有CheckedChanged事件和CheckStateChanged事件。我習慣於.NET 2.0,所以這可能是3.0+的東西。無論哪種方式,我想我已經在這樣的實例中手動調用了事件處理程序,沒有任何問題。

您可以手動調用與空PARAMS(或已知物體&新事件參數)的事件處理程序:

NormalCheckBoxControl_Checked(null, null); 

NormalCheckBoxControl_Checked(new object, new EventArgs()); 

這應該手動脫掉你的常規,除非你需要它們,那麼提供虛擬參數確實沒有問題。無需舉辦活動並等待它泡泡,只需調用例程即可。

當然,如果還有其他例程依賴於事件冒泡或者如果您有多個處理程序用於同一個事件,那麼它可能會導致您遇到問題。請注意,以防萬一。

+0

謝謝,我會看看是否手動啓動該事件會對我有用。僅供參考 - 我的應用程序使用的是.NET Framework 4.0,因此可能直到3.0+ – Saggio

+0

之前沒有添加「CheckBox.Checked」,我只是在MSDN上檢查過,看起來像3.0更改了事件名稱。沒什麼大問題,它應該仍然有效。我正在製作一個WinForms 2.0示例來查看它是否有效。 –

+0

通過對事件偵聽器內的邏輯進行一些小的更新,調用'NormalCheckBoxControl_Checked(null,null)'顯式工作;謝謝!我沒有意識到可以手動調用事件偵聽器(更不用說能夠用'null'參數來調用它們了!),而無需實際引發事件來觸發事件偵聽器。 – Saggio