2011-11-07 114 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