1

我只是尝试在 C++ Builder 6 中编写小程序(不要问我为什么,这只是学院的作业)。所以,当我调整表单大小时,我的程序必须隐藏 button1。但是在创建窗口后会引发调整大小事件,这意味着在我启动程序之后 button1 已经不可见。

void __fastcall TForm1::FormResize(TObject *Sender)
{
  Button1->Visible = false;
}

我尝试使用不同的调整大小事件,但它也不起作用。我做错了什么?

PS。对不起,我的英语不好。

4

1 回答 1

4

没有任何错误。表单在创建时确实会调整大小,这就是您获得事件的原因。有很多方法可以解决这个问题:

  1. 使用变量忽略第一个OnResize事件,直到表单准备好:

    private:
        bool fReady;
    

    void __fastcall TForm1::FormResize(TObject *Sender)
    {
        if (!fReady)
            fReady = true;
        else
            Button1->Visible = false;
    }
    
  2. 使用 Form 的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;
    }
    
  3. 使用短计时器而不是自定义消息:

    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;
    }
    

仅举几个。

于 2013-09-26T00:29:34.177 回答