我刚尝试在C ++ Builder 6中编写小程序(不要问我为什么,它只是学院的一项功课)。 因此,当我调整表单大小时,我的程序必须隐藏button1。 但是在窗口创建后调整大小事件会增加,这意味着在我启动程序后按钮1已经不可见了。
void __fastcall TForm1::FormResize(TObject *Sender)
{
Button1->Visible = false;
}
我尝试使用不同的调整大小事件,但它也不起作用。 我做错了什么?
PS。抱歉我的英语不好。
答案 0 :(得分:4)
没有错。表单在创建时确实会调整大小,这就是您获得活动的原因。有很多方法可以解决这个问题:
使用变量忽略第一个OnResize
事件,直到表单就绪:
private:
bool fReady;
void __fastcall TForm1::FormResize(TObject *Sender)
{
if (!fReady)
fReady = true;
else
Button1->Visible = false;
}
使用表单OnShow
事件发布自定义消息,表明表单已准备就绪:
private:
bool fReady;
protected:
virtual void __fastcall WndProc(TMessage &Message);
const UINT WM_READY = WM_APP + 100;
void __fastcall TForm1::WndProc(TMessage &Message)
{
if (Message.Msg == WM_READY)
fReady = true;
else
TForm::WndProc(Message);
}
void __fastcall TForm1::FormShow(TObject *Sender)
{
PostMessage(Handle, WM_READY, 0, 0);
}
void __fastcall TForm1::FormResize(TObject *Sender)
{
if (fReady)
Button1->Visible = false;
}
使用短计时器而不是自定义消息:
private:
bool fReady;
void __fastcall TForm1::Timer1Timer(TMessage &Message)
{
Timer1->Enabled = false;
fReady = true;
}
void __fastcall TForm1::FormShow(TObject *Sender)
{
Timer1->Enabled = true;
}
void __fastcall TForm1::FormResize(TObject *Sender)
{
if (fReady)
Button1->Visible = false;
}
仅举几例。