2009-11-06 75 views
-1

當一個winform第一次顯示時,該複選框默認是取消選中。如果表格第一次顯示時,我點擊複選框'檢查',複選框出現一秒鐘後檢查,然後消失。 checkedchanged事件從不會觸發。但是,如果在第一次初始嘗試後的任何時候點擊複選框,則值會發生變化(檢查爲未檢查,反之亦然),並且事件觸發。C#複選框有奇怪的行爲

任何想法爲什麼複選框不會檢查第一次嘗試?當你將鼠標懸停在它上面時,它會首次被選中,所以我知道它有重點。

更新:如果您先將數據輸入到所有其他控件,然後單擊該複選框,則第一次點擊它時閃爍,並且檢查一秒後閃爍,然後檢查消失。在第一次之後的任何時候,儘管它有效。奇怪...

+0

你能發表一些代碼嗎? – 2009-11-06 16:54:17

+0

發佈一些代碼,如複選框初始化和事件處理...你使用任何綁定? – jmayor 2009-11-06 17:26:45

+0

你可以發佈處理任何複選框事件的方法的代碼(點擊,CheckChanged等) – 2009-11-06 17:26:53

回答

1

很難說沒有看到代碼段。當我過去有過這樣的事情時,這是由於有重複的控制ID,或錯誤地連接事件處理程序。您是否嘗試禁用部分代碼並查看影響複選框行爲的因素?

+0

+1指出他需要*減少他的問題空間。然而,你對控件ID的評論大部分都是C++/Win32背景。如果在C#中可以有重複的控制ID,我會感到驚訝......另一方面,接線不好的事件處理程序就是我把錢放在哪裏......(我剛寫了一個示例應用程序,其中只有一個複選框形式...它保持點擊第一次點擊它...) – 2009-11-29 03:46:55

0

這樣做只有一個CB嗎?或表格上的所有CB。

您是否嘗試刪除CB然後添加回來?

我建議你發佈代碼背後的代碼?

+1

感謝您的響應崩潰和flyfishr,我刪除了控件,並將窗體上沒有自定義代碼作爲一個測試新的錐和我沒有得到相同的行爲。很難看到如果有什麼事情造成這種情況。當我刪除所有的自定義代碼時,它仍然會發生。我已經嘗試在構造函數中設置焦點,並將控件設置爲checkedstate = checked(這與我想要在表單加載時的默認行爲相反),但第一次單擊確實將它設置爲未檢查。如果我設置焦點(),然後將狀態設置爲未選中狀態,則它會完成整個閃光並且不再執行任何操作。 – TCH 2009-11-06 17:03:36

+1

我也將下面的代碼放在窗體構造函數中作爲一個測試,但它不會改變行爲: this.chkbox1.UnCheckedValue =「0」; this.chkbox1.CheckedValue =「1」; this.chkbox1.ThreeState = false; this.chkbox1.Value =「0」; this.chkbox1.Checked = false; 如果我點擊第一次點擊控件時點擊進入點擊,但它不會觸發CheckChanged()。它雖然在隨後的點擊做。 – TCH 2009-11-06 17:05:55

1

奇怪的是,把代碼中的CheckedChanged()來設置值(它被設置爲無論如何,如果我通過它追蹤)似乎工作:

 if (this.chkbox1.Checked == true) 
     { 
      this.chkbox1.Value = "1"; 
      this.chkbox1.Text = "Checked"; 
     } 
     else 
     { 
      this.chkbox1.Value = "0"; 
      this.chkbox1.Text = "Un-checked"; 
     } 

我也把焦點()在點擊():

 if (((System.Windows.Forms.MouseEventArgs)(e)).Clicks <= 1) 
     { 
      if (this.chkbox1.Focused == false) 
      { 
       this.chkbox1.Focus(); 
      } 
     } 

我不知道爲什麼解決了這個問題,但它確實如此。

0

對於您的自定義代碼,我會嘗試使用不同的轉換樣式,以查看它是否有任何區別。

如果您使用標準的C#語法,它失敗(消失複選框)

CheckBox checkBox = sender as CheckBox; 

我會嘗試使用發送對象的舊式鑄鐵,看看它給你想要的結果:

CheckBox checkBox = (CheckBox)sender; 

這可能會給你一個根本原因的提示。