新建一个工程,
Form1上放一个按钮。
按钮事件:
Form2.RadioGroup1.ItemIndex := 0;
Form2.Show;新建一个Form,放一个RadioGroup,里面填一些内容。运行,点击Form1上按钮,进入Form2.
修改RadioGroup的值,关闭form2。
再次点击form1上按钮:radiogroup的值不再是0,而是上次修改的值!假如form2上有其他控件,关闭Form2前将焦点移动到其他控件上,就不会出现这种情况。应该是radiogroup对radiobutton的封装有些问题。请问如何解决这个问题?

解决方案 »

  1.   

    原因为Form2在关闭是未完全释放
    请在Form2.OnClose事件中写入:  
      Action := caFree;
      

  2.   

    请问如何解决这个问题?
    ========================procedure TForm2.FormClose(Sender: TObject; var Action: TCloseAction);
    begin
      Action := caFree;
      Form2 := nil;
    end;
      

  3.   

    在不释放FORM2的情况下呢?
    因为form2可能会被频繁使用。
    难道只有在关闭前设置ActiveControl=NIL?
      

  4.   

    procedure TForm2.FormClose(Sender: TObject; var Action: TCloseAction);
    begin
      RadioGroup1.ItemIndex := 0;
    end;
    这样就不必释放form2了。而且保证每次都是你要的
      

  5.   

    呵呵,和“ActiveControl=NIL”差不多,甚至还差些。
    因为我每次显示form2时有可能需要为itemindex设置不同的值。
      

  6.   

    请问界面上有没有其他控件,如果有可以
    procedure TForm2.FormCloseQuery(Sender: TObject; var CanClose: Boolean);
    begin
      Edit1.SetFocus;
    end;如果没有,可不可以放一个visible=false的edit控件(方法太笨,别笑我,呵呵)
      

  7.   

    visible=false的edit控件没用的,因为这个控件得不到焦点。
    看来只能用
    ActiveControl := NIL;
      

  8.   

    同意如下办法:
    procedure TForm2.FormClose(Sender: TObject; var Action: TCloseAction);
    begin
      RadioGroup1.ItemIndex := 0;
    end;
      

  9.   

    因为:
    Form2.RadioGroup1.ItemIndex := 0;
    后,的确被正确设置为0,但:
    Form2.Show;
    时,因为RadioGroup中上次被选择的按钮TGroupButton要获得焦点,而TGroupButton获得焦点时被自动选中。所以解决办法有两个:
    1、
    Form2.Show;
    Form2.RadioGroup1.ItemIndex := 0;
    2、
    with Form2 do
    begin
      DefocusControl(RadioGroup1, True);
      RadioGroup1.ItemIndex := 1;
      Show;
    end;————————————————————————————————————
    宠辱不惊,看庭前花开花落,去留无意;毁誉由人,望天上云卷云舒,聚散任风。
    ————————————————————————————————————