2011-11-07 38 views
3

我已經創建了一個帶有2個單選按鈕的表單(名稱:SubForm)。在任何單選按鈕上單擊另一個表單(名稱:MainForm)將顯示。在SubForm.OnShow事件中,我已經設置了radiobutton1.checked:= False; radiobutton2.checked:= False;但是子窗體將顯示爲單選按鈕1或單選按鈕2。在Delphi 7中的FormShow問題

任何想法爲什麼選中的財產未設置爲False

+0

您使用的是什麼版本的Delphi?德爾福2010年(我不知道以前的版本)允許你有所有單選按鈕未選中。 – LightBulb

+0

對不起忘了提及..我使用Delphi 7. – Nalu

+3

默認情況下,沒有RadioButtons被選中。然後,以獨佔方式檢查單選按鈕:這是單選按鈕的標準行爲 - 只能一次檢查一個。所以我無法重現Delphi 7的任何問題。你的代碼中應該有一些東西,或者你猜測你的單選按鈕有一些錯誤的行爲。嘗試使用*新形式*創建*新應用程序*,以便重現問題,然後在此處發佈代碼和確切行爲,以便重現。 –

回答

3

首先關於是否使用無線電組:如果多於一個單選按鈕具有相同的父節點,則該父節點將自動作爲無線電組,無論您是否使用TRadioGroup組件。因此,具有相同父母的單選按鈕的行爲就像他們應該這樣做:沒有或只能選擇一個。其次,將一組單選按鈕重置爲未選中/未選中狀態是完全有效的。最近的例子見default radio option of edit rejection dialogue

我轉載了你的問題,但我沒有解釋。會發生什麼情況是,當您再次顯示表格(而不是再次重新創建)時,那麼焦點控件仍然是該單選按鈕。該焦點以某種方式防止改變選中的狀態。 任何人有任何想法爲什麼?我無法在VCL源代碼中找到它。

解決方法是散焦所選的單選按鈕。這可以通過以下三種方式進行,按優先順序:

  • 焦點首先出現在選項卡順序列表控制(這是很好的做法反正):

    procedure TSubForm.FormShow(Sender: TObject); 
    begin 
        SelectFirst; 
        RadioButton1.Checked := False; 
        RadioButton2.Checked := False; 
    end; 
    
  • 但是當單選按鈕是第一控制中,然後將焦點設置到窗體本身:

    SetFocus; 
        RadioButton1.Checked := False; 
        ... 
    
  • 或者焦點設置到任何其他控制的情況下是有意義的:

    OKButton.SetFocus; 
        RadioButton1.Checked := False; 
        ... 
    
+0

gr8的解釋和確切的解決方案...謝謝NGLIN n其他人也.. – Nalu