本帖最后由 Cone0001 于 2010-03-26 15:11:15 编辑

解决方案 »

  1.   

    frmNew:=TfrmNew.Create(Application);或者frmNew:=TfrmNew.Create(nil);试试.
      

  2.   

    frmNew.Edit1.Text:=ListView1.Selected.Caption; //这句能正常实现
    frmNew.ProID:=strtoint(ListView1.Selected.Caption); //这句也不行
    按道理不应该,那就把frmNew.ProID:=strtoint(ListView1.Selected.Caption);放到下面试试
      

  3.   


    试了还是不行frmNew.Edit1.Text:=ListView1.Selected.Caption; //这句能正常实现
    上面能正常,哪是因为将值付给frmNew中的Edit1中的原因主要是附给frmNew中全局变量ProID时就不行了。
      

  4.   

    下面代码是frmNew表单对应的pas代码,单元文件名为NewF.pasunit NewF;interfaceuses
      Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
      Dialogs, StdCtrls, ComCtrls;type
      TfrmNew = class(TForm)
        PageControl1: TPageControl;
        TabSheet1: TTabSheet;
        TabSheet2: TTabSheet;
        Button1: TButton;
        Button2: TButton;
        Button3: TButton;
        Button4: TButton;
        Button5: TButton;
        GroupBox1: TGroupBox;
        Label1: TLabel;
        Edit1: TEdit;
        Label2: TLabel;
        Edit2: TEdit;
        Label3: TLabel;
        Edit3: TEdit;
        Label4: TLabel;
        Edit4: TEdit;
        Label5: TLabel;
        Label6: TLabel;
        ComboBox1: TComboBox;
        Label7: TLabel;
        Edit5: TEdit;
        Label8: TLabel;
        Edit6: TEdit;
        Label9: TLabel;
        Edit7: TEdit;
        Label10: TLabel;
        Edit8: TEdit;
        Label11: TLabel;
        DateTimePicker1: TDateTimePicker;
        GroupBox2: TGroupBox;
        procedure FormClose(Sender: TObject; var Action: TCloseAction);
        procedure FormShow(Sender: TObject);
        procedure FormCreate(Sender: TObject);
      private
        { Private declarations }
      public
        { Public declarations }
        ProID:Integer;  {项目ID编号}
      end;var
      frmNew: TfrmNew;implementation{$R *.dfm}procedure TfrmNew.FormClose(Sender: TObject; var Action: TCloseAction);
    begin
      action:=cafree;
    end;procedure TfrmNew.FormShow(Sender: TObject);
    begin
      //Edit1.Text:=inttostr(ProID); //这句不行
      ShowMessage(inttostr(ProID)); //这句也不行
    end;procedure TfrmNew.FormCreate(Sender: TObject);
    begin
      Edit2.Text:=inttostr(ProID);  //这句也不行
    end;end.
      

  5.   

    在网上也找了,都是这么说的。并且这种附值时,显示这个值应该在TfrmNew.FormShow过程中,可我上面两个都试了。都不行!
      

  6.   

    下面代码是frmOpen表单对应代码,单元文件名为OpenF.pas
    unit OpenF;interfaceuses
      Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
      Dialogs, StdCtrls, DBCtrls, DB, Grids, DBGrids, ADODB, CheckLst, ComCtrls;type
      TfrmOpen = class(TForm)
        Button1: TButton;
        Button2: TButton;
        Label1: TLabel;
        ListView1: TListView;
        procedure FormClose(Sender: TObject; var Action: TCloseAction);
        procedure Button2Click(Sender: TObject);
        procedure FormCreate(Sender: TObject);
        procedure Button1Click(Sender: TObject);
      private
        { Private declarations }
      public
        { Public declarations }
      end;var
      frmOpen: TfrmOpen;implementation{$R *.dfm}
    uses
      mainDM,NewF;{mainDM为数据模块}procedure TfrmOpen.FormClose(Sender: TObject; var Action: TCloseAction);
    begin
      //action:=cafree;
    end;procedure TfrmOpen.Button2Click(Sender: TObject);
    begin
      close;
    end;procedure TfrmOpen.FormCreate(Sender: TObject);
    var
      ListItem: TListItem;
    begin
      ListView1.Items.Clear;
      DM.ADOQuery.SQL.clear;
      DM.ADOQuery.SQL.Add('select * from project');
      DM.ADOQuery.Open;
      while not DM.ADOQuery.Eof  do
      begin
        with ListView1 do
        begin
          ListItem := Items.Add;
          ListItem.Caption:=DM.ADOQuery.FieldByName('id').AsString;
          ListItem.SubItems.Add(DM.ADOQuery.FieldByName('project_name').AsString);
          ListItem.SubItems.Add(DM.ADOQuery.FieldByName('project_addtime').AsString);
        end;
        DM.ADOQuery.Next;
      end;
      DM.ADOQuery.Close;
      DM.ADOQuery.SQL.Clear;
    end;procedure TfrmOpen.Button1Click(Sender: TObject);
    var
      i:integer;
    begin
      if ListView1.Selected <> nil then
      begin
        frmNew:=TfrmNew.Create(Application);
        for i:=0 to ListView1.Items.Count-1 do begin
          if ListView1.Items[i].Selected then
            frmNew.Caption:='工程-'+ListView1.Items[i].SubItems.Strings[0];
        end;
        frmNew.ProID:=strtoint(ListView1.Selected.Caption); //这句就是传不过去值
        //frmNew.ProID:=500;
        frmNew.Edit1.Text:=ListView1.Selected.Caption; //这句是可以实现的
        frmNew.Show;
        close;
      end;
    end;end.
      

  7.   

    procedure TfrmOpen.Button1Click(Sender: TObject);
    var
      i:integer;
    begin
      if ListView1.Selected <> nil then
      begin
        frmNew:=TfrmNew.Create(Application);
        for i:=0 to ListView1.Items.Count-1 do begin
          if ListView1.Items[i].Selected then
            frmNew.Caption:='工程-'+ListView1.Items[i].SubItems.Strings[0];
        end;
        frmNew.ProID:=strtoint(ListView1.Selected.Caption); //这句就是传不过去值
        //frmNew.ProID:=500;
        frmNew.Edit1.Text:=ListView1.Selected.Caption; //这句是可以实现的
        frmNew.Show;
        //close;这句注释掉。
      end;
    end;
      

  8.   

    按你上面的将close;注释掉了,问题依然存在!
      

  9.   

    这是我在Csdn上的第一个处女帖啊,希望高手帮仔细看一下我的问题所在,我测试了一天了。到目前还不知道问题出在哪儿。。
      

  10.   

    可能是我的描述不是很准确。刚才我试了一下。原来我的主窗体FormStyle属性值设置成了fsMDIForm;而frmOpen的FormStyle的属性值设置成了fsNormal;frmNew的FormStyle的属性值设置成了fsMDIChild;造成参数不能接收如果将主窗体及子窗体的FormStyle的属性值都设置成fsNormal便能成功接收参数。现在的问题是如果照着我这个设置方式如何才能保证成功呢?
      

  11.   

    经过我现在的测试发现一个问题即是当要接收参数的窗体(本例为frmNew)的FormStyle的属性值设置为fsMDIChild时就会出现上面的情况。我也测试了用数据模块进行传值,但在弟一次传值过去时,不成功,每二次传值过去时,显示的为第一次传的值,对于这个问题不解。为了把问题说明清楚,我将整个例子放在了下面这个地址,望大家多多指教。一起看看出现什么问题。http://www.amcone.cn/wp-content/uploads/2010/03/forms.rar