有两个窗体form1和form2,form1上有一个edit控件,双击该控件调出form2,在form2中的一个edit控件中输入文字然后回车,此时关闭form2并且输入的文字显示在form1的edit控件中。 如果仅仅是这么两个窗体而言,其实挺简单, 在form2的edit的TForm2.Edit1KeyPress事件中写
if key=#13 then
begin
form1.edit.text:=self.edit.text;
Self.close;
end;
就可以了吧。可是我要做的是,form2这样一个窗体会被好多个窗体调用,而不仅仅是一个form1窗体,所以在上面的事件中似乎我还得判断每个调用它的窗体的类名,分别为每个调用它的窗体写不同的代码。 但是这样做,它的通用性似乎又很差。不知道大家对于类似的问题时怎样解决的?给个思路也行啊。也不知说清楚了没,请大家多提意见。

解决方案 »

  1.   

    直接在unit2里面加个全局函数
    function GetMyText: String;
    .....function GetMyText: String;
    begin
       Result := Edit1.Text;
    end;然后每个窗体调用就行了
      

  2.   

    就你说的而言好像是想输入对话框参看inputbox的代码自己写一个函数就可以了代码如下:
    function GetAveCharSize(Canvas: TCanvas): TPoint;
    var
      I: Integer;
      Buffer: array[0..51] of Char;
    begin
      for I := 0 to 25 do Buffer[I] := Chr(I + Ord('A'));
      for I := 0 to 25 do Buffer[I + 26] := Chr(I + Ord('a'));
      GetTextExtentPoint(Canvas.Handle, Buffer, 52, TSize(Result));
      Result.X := Result.X div 52;
    end;
    function TForm1.myInputQuery(const ACaption, APrompt: string ): string;
    var
     Form: TForm;
      Prompt: TLabel;
      Edit: TEdit;
      DialogUnits: TPoint;
      ButtonTop, ButtonWidth, ButtonHeight: Integer;
    begin
      Result := '';
      Form := TForm.Create(Application);
      with Form do
        try
          Canvas.Font := Font;
          DialogUnits := GetAveCharSize(Canvas);
          BorderStyle := bsDialog;
          Caption := ACaption;
          ClientWidth := MulDiv(180, DialogUnits.X, 4);
          ClientHeight := MulDiv(63, DialogUnits.Y, 8);
          Position := poScreenCenter;
          Prompt := TLabel.Create(Form);
          with Prompt do
          begin
            Parent := Form;
            AutoSize := True;
            Left := MulDiv(8, DialogUnits.X, 4);
            Top := MulDiv(8, DialogUnits.Y, 8);
            Caption := APrompt;
          end;
          Edit := TEdit.Create(Form);
          with Edit do
          begin
            Parent := Form;
            Left := Prompt.Left;
            Top := MulDiv(19, DialogUnits.Y, 8);
            Width := MulDiv(164, DialogUnits.X, 4);
            MaxLength := 255;
            SelectAll;
          end;
          ButtonTop := MulDiv(41, DialogUnits.Y, 8);
          ButtonWidth := MulDiv(50, DialogUnits.X, 4);
          ButtonHeight := MulDiv(14, DialogUnits.Y, 8);
          with TButton.Create(Form) do
          begin
            Parent := Form;
            Caption := '确定';
            ModalResult := mrOk;
            Default := True;
            SetBounds(MulDiv(38, DialogUnits.X, 4), ButtonTop, ButtonWidth,
              ButtonHeight);
          end;
          with TButton.Create(Form) do
          begin
            Parent := Form;
            Caption := '取消';
            ModalResult := mrCancel;
            Cancel := True;
            SetBounds(MulDiv(92, DialogUnits.X, 4), ButtonTop, ButtonWidth,
              ButtonHeight);
          end;
          if ShowModal = mrOk then
          begin         Result := Edit.Text;
            end;
        finally
          Form.Free;
        end;end;
    使用的时候就:procedure TForm1.Edit1Click(Sender: TObject);
    begin
      edit1.Text := myInputQuery('请输入值','姓名' );
    end;
      

  3.   

    感谢各位帮忙,我试试你们的办法,请继续关注啊。
    to cg1120(代码最优化-§新年祝福你,好运伴着你§):能详细点吗? 谢谢