我在窗体上放了一个RadioGroup1,把它的items加了有20多个,同时也加入了20多
个edit控件。我想实现这样一个功能:就是每当我点一下RadioGroup1上的其中一个选项,那么相应的edit控件就要得到焦点,我不想一个一个地设置!
  请问各位大哥,要如何实现比较简单?
  请给出代码,谢谢各位了。

解决方案 »

  1.   

    看你的TEdit是怎么命名的
    如果是Edit0, Edit1.....EditNEdit0和RadioGroup1.ItemIndex[0]关联的话.....procedure TForm1.RadioGroup1Click(Sender: TObject);
    begin
      if (Self.FindComponent('Edit' + IntToStr(RadioGroup1.ItemIndex)) is TEdit) then
      begin
        ((Self.FindComponent('Edit' + IntToStr(RadioGroup1.ItemIndex)) as TEdit).SetFocus;
      end;
    end;
      

  2.   

    本方法不限制TEDIT's NAME属性:),但要自己添加:)
    unit Unit1;interfaceuses
      Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
      StdCtrls, ExtCtrls;type
      TForm1 = class(TForm)
        RadioGroup1: TRadioGroup;
        Edit1: TEdit;
        Edit2: TEdit;
        Edit3: TEdit;
        Edit4: TEdit;
        Edit5: TEdit;
        Edit6: TEdit;
        procedure FormCreate(Sender: TObject);
        procedure RadioGroup1Click(Sender: TObject);
      private
        { Private declarations }
      public
        { Public declarations }
      end;
    type
      editarray=array [0..5] of tedit;
    var
      Form1: TForm1;
      var_editarray:editarray;
    implementation{$R *.DFM}procedure TForm1.FormCreate(Sender: TObject);
    var
      i:integer;begin
      for i:=0 to 5 do
      begin
      form1.radiogroup1.items.add(inttostr(i));
      end;  var_editarray[0]:=edit1;
      var_editarray[1]:=edit2;
      var_editarray[2]:=edit3;
      var_editarray[3]:=edit4;
      var_editarray[4]:=edit5;
      var_editarray[5]:=edit6;end;
    procedure TForm1.RadioGroup1Click(Sender: TObject);
    begin
      tedit(var_editarray[radiogroup1.ItemIndex]).setfocus;
    end;end.
      

  3.   

    谢谢你的贴子,我已经解解了。我还想向你讨教2个问题:
        1。上面的例子,我还要加一点,就是每但我点RadioGroup1的时候,还能把edit
    控件的内容清空。    2。就是上面的,如果反过来呢,就是说当我要点edit控件,那么相应的RadioGroup1的也能选中,如何实现呢?
    ---------------------------------------------------------------
    太长了, 没法给你留言
    ---------------------------------------------------------------
    unit Unit1;interfaceuses
      Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
      Dialogs, StdCtrls, ExtCtrls;type
      TForm1 = class(TForm)
        RadioGroup1: TRadioGroup;
        Edit1: TEdit;
        Edit2: TEdit;
        Edit3: TEdit;
        Edit4: TEdit;
        Edit5: TEdit;
        procedure TEditOnClick(Sender: TObject);
        procedure RadioGroup1Click(Sender: TObject);
      private
        { Private declarations }
      public
        { Public declarations }
      end;var
      Form1: TForm1;implementation{$R *.dfm}{ TForm1 }//把所有的Edit的OnClick事件关联到下面的事件
    //选中所有的Edit, 在Events页面点击OnClick选中TEditOnClick即可
    procedure TForm1.TEditOnClick(Sender: TObject);
    var
      EditIndex: string;
    begin
      with Sender do
      begin
        if Sender is TEdit then
        begin
          EditIndex := (Sender as TEdit).Name;
          Delete(EditIndex, 1, 4);
          RadioGroup1.ItemIndex := StrToInt(EditIndex) - 1;
        end;
      end;
    end;procedure TForm1.RadioGroup1Click(Sender: TObject);
    begin
      if Self.FindComponent('Edit' + IntToStr(RadioGroup1.ItemIndex + 1)) is TEdit then
      begin
        (Self.FindComponent('Edit' + IntToStr(RadioGroup1.ItemIndex + 1)) as TEdit).SetFocus;
        (Self.FindComponent('Edit' + IntToStr(RadioGroup1.ItemIndex + 1)) as TEdit).Clear;
      end;
    end;end.