如何在窗体的构造函数中添加自己的参数?在线等待...

时间:2021-08-05 23:29:48
如何在窗体的构造函数中添加自己的参数?
__fastcall TWizForm::TWizForm(TComponent* Owner, int nDate)
          : TForm(Owner)
{
    m_nCurDate = nDate;
}
我这样写,编译时没问题,运行时程序却自动退出,为什么?
我是这样调的:
   TTWizForm *pform = new TWizForm(Application, 0);
...

19 个解决方案

#1


构造函数可以初始化自定义变量
TTwizForm *pform=new TwizForm(this);行不行

#2


gz and up

#3


在给窗体在写一个构造函数啊,类可以有多个构造函数啊。
//。h
lass TRecvForm : public TForm
{
__published: // IDE-managed Components
    TPanel *Panel1;
    TLabel *Label3;
    TLabel *NameL;
    TLabel *Label4;
    TLabel *Label1;
    TRichEdit *SmsRE;
    TLabel *PhoneL;
    TPanel *Panel2;
    TLabel *Label8;
    TLabel *TimeL;
    TSpeedButton *CancelBtn;
    TSpeedButton *SpeedButton1;
    void __fastcall CancelBtnClick(TObject *Sender);
    void __fastcall SpeedButton1Click(TObject *Sender);
private: // User declarations
public: // User declarations
    __fastcall TRecvForm(TComponent* Owner);
    __fastcall TRecvForm(TComponent* Owner,String name,String phone2,String smsdate,String smstime,String msg);    
};

//。cpp
TRecvForm *RecvForm;
//---------------------------------------------------------------------------
__fastcall TRecvForm::TRecvForm(TComponent* Owner)
    : TForm(Owner)
{
}
__fastcall TRecvForm::TRecvForm(TComponent* Owner,String name,String phone2,String smsdate,String smstime,String msg)
    : TForm(Owner)
{
    NameL->Caption=name;
    PhoneL->Caption=phone2;
    TimeL->Caption=smsdate.SubString(1,4)+"-"+smsdate.SubString(5,2)+"-"+smsdate.SubString(7,2)+"  "+smstime;
    SmsRE->Lines->Add(msg);
}

#4


重载

#5


你的写法没有问题,可能是你的程序中另外的问题引起程序的崩溃

#6


darkinger(少爷) ( 
相同意见.
建议再写一个重

#7


__fastcall TWizForm::TWizForm(TComponent* Owner, int nDate)
          : TForm(Owner), m_nCurDate(nDate) //这种写法,是Form类还没建立时,就已赋值了
{
}

#8


darkinger(少爷)说得对,你应该再加一个构造函数!

#9


我觉得以上所说均不妥,

Application 似忽不能作为自定义窗口的 owner,除非是主窗口,
你不妨试试将主窗口作 owner.

#10


我想说三点:
1.Application可以作为动态创建窗口的释放者,所有者,但不是parent。
2.一个类可以有多个构造函数,一个且仅有一个析构函数,这无可厚非,可以另写一个构造函数
3.还有一个方法,不知大家试了没有,我们不用多加一个构造函数,而在默认的构造加一行代码,保证类的基本行为得以实现:
that is:
__fastcall TWizForm::TWizForm(TComponent* Owner, int nDate)
          : TForm(Owner)
{
   TForm::TForm(Owner); 
   m_nCurDate = nDate;
}

#11


学习

#12


真是奇怪,我又加了一个参数就可以了。
__fastcall TWizForm::TWizForm(TComponent* Owner, int nDate, int n2)
          : TForm(Owner);

....
百思不得其解!!!

#13


没人有好的建议了?

#14


up!

#15


重载窗体的构造器即可,但要重载双参数的构造器!CB用双参数的构造器来动态创建窗体,因为设计时创建的窗体用DFM文件,而动态创建的窗体没有此文件,对基类构造器,那个int没有用,你可以把0给它。
__fastcall TForm1::TForm(TComponent* Owner, int nMyint)
          : TForm(Owner,0)
{
    
}

#16


我在看!!!???~~~__

#17


Mark@_@

学习。

#18


我也遇到过,好像Build一下就可以了。

#19


invalid(空心菜) :你怎么变成三角形了阿
我记得你是星星阿

#1


构造函数可以初始化自定义变量
TTwizForm *pform=new TwizForm(this);行不行

#2


gz and up

#3


在给窗体在写一个构造函数啊,类可以有多个构造函数啊。
//。h
lass TRecvForm : public TForm
{
__published: // IDE-managed Components
    TPanel *Panel1;
    TLabel *Label3;
    TLabel *NameL;
    TLabel *Label4;
    TLabel *Label1;
    TRichEdit *SmsRE;
    TLabel *PhoneL;
    TPanel *Panel2;
    TLabel *Label8;
    TLabel *TimeL;
    TSpeedButton *CancelBtn;
    TSpeedButton *SpeedButton1;
    void __fastcall CancelBtnClick(TObject *Sender);
    void __fastcall SpeedButton1Click(TObject *Sender);
private: // User declarations
public: // User declarations
    __fastcall TRecvForm(TComponent* Owner);
    __fastcall TRecvForm(TComponent* Owner,String name,String phone2,String smsdate,String smstime,String msg);    
};

//。cpp
TRecvForm *RecvForm;
//---------------------------------------------------------------------------
__fastcall TRecvForm::TRecvForm(TComponent* Owner)
    : TForm(Owner)
{
}
__fastcall TRecvForm::TRecvForm(TComponent* Owner,String name,String phone2,String smsdate,String smstime,String msg)
    : TForm(Owner)
{
    NameL->Caption=name;
    PhoneL->Caption=phone2;
    TimeL->Caption=smsdate.SubString(1,4)+"-"+smsdate.SubString(5,2)+"-"+smsdate.SubString(7,2)+"  "+smstime;
    SmsRE->Lines->Add(msg);
}

#4


重载

#5


你的写法没有问题,可能是你的程序中另外的问题引起程序的崩溃

#6


darkinger(少爷) ( 
相同意见.
建议再写一个重

#7


__fastcall TWizForm::TWizForm(TComponent* Owner, int nDate)
          : TForm(Owner), m_nCurDate(nDate) //这种写法,是Form类还没建立时,就已赋值了
{
}

#8


darkinger(少爷)说得对,你应该再加一个构造函数!

#9


我觉得以上所说均不妥,

Application 似忽不能作为自定义窗口的 owner,除非是主窗口,
你不妨试试将主窗口作 owner.

#10


我想说三点:
1.Application可以作为动态创建窗口的释放者,所有者,但不是parent。
2.一个类可以有多个构造函数,一个且仅有一个析构函数,这无可厚非,可以另写一个构造函数
3.还有一个方法,不知大家试了没有,我们不用多加一个构造函数,而在默认的构造加一行代码,保证类的基本行为得以实现:
that is:
__fastcall TWizForm::TWizForm(TComponent* Owner, int nDate)
          : TForm(Owner)
{
   TForm::TForm(Owner); 
   m_nCurDate = nDate;
}

#11


学习

#12


真是奇怪,我又加了一个参数就可以了。
__fastcall TWizForm::TWizForm(TComponent* Owner, int nDate, int n2)
          : TForm(Owner);

....
百思不得其解!!!

#13


没人有好的建议了?

#14


up!

#15


重载窗体的构造器即可,但要重载双参数的构造器!CB用双参数的构造器来动态创建窗体,因为设计时创建的窗体用DFM文件,而动态创建的窗体没有此文件,对基类构造器,那个int没有用,你可以把0给它。
__fastcall TForm1::TForm(TComponent* Owner, int nMyint)
          : TForm(Owner,0)
{
    
}

#16


我在看!!!???~~~__

#17


Mark@_@

学习。

#18


我也遇到过,好像Build一下就可以了。

#19


invalid(空心菜) :你怎么变成三角形了阿
我记得你是星星阿

#20