4 Stimmen

Was ist mit der Vererbungskette von TBitBtn und TButton passiert?

Ich habe kürzlich begonnen, mein RAD Studio 2007-Projekt auf RAD Studio 2009 zu aktualisieren. Eine Sache, die ich bemerkt habe, ist, dass scheinbar einfacher Code plötzlich nicht mehr kompiliert werden kann.

Beispiel-Code:

class CButtonPopupMenu
{
    // Snip

public:
    void Init( TButton* SrcButton )
    {
        SrcButton->OnClick = OnButtonClick;
    }

private:
    void __fastcall OnButtonClick( TObject* Sender )
    {
        // Do some button click stuff
    }
};

// Snip

TButton button = new TButton( this );
TBitBtn bitBtn = new TBitBtn( this );
CButtonPopupMenu popupButton = new CButtonPopupMenu( button );
CButtonPopupMenu popupBitBtn = new CButtonPopupMenu( bitBtn );

Früher ließ sich das alles kompilieren, aber seit 2009 funktioniert es nicht mehr. Betrachtet man die Vererbungskette für 2007 TBitBtn verwendet, um von TButton . Daher wurden Ereignisse, die bei jedem Schaltflächensteuerelement erwartet werden (z. B. OnClick), von der TButton Klasse. Deshalb konnte ich meine TBitBtn Klasse als TButton .

2007 Vererbungskette:

  • TBitBtn : TButton

2009 Vererbungskette:

  • TBitBtn : TCustomButton
  • TButton : TCustomButton

Im Jahr 2009 haben beide TButton y TBitButton entstammen TCustomButton Das wäre auch in Ordnung, wenn man die Attribute der Schaltfläche beibehalten würde. Wenn dies der Fall wäre, könnte ich einfach den Code ändern, um mit einer TCustomButton stattdessen. Leider, TCustomButton enthält nicht Dinge wie OnClick . Daher kann ich nicht länger eine TBitBtn wie ein TButton . Beide dieser Klassen haben jetzt ihre eigenen separaten Schaltfläche wie Attribute (d.h. sie haben beide ihre eigenen OnClick-Ereignis deklariert). Ich meine, bieten Sie zumindest eine Schnittstelle oder etwas, wie IButton dass sowohl TButton y TBitBtn Gerät.

Es scheint, dass gerade solche scheinbar unschuldigen Änderungen unnötigen Schaden anrichten können. Dies scheint seltsam und ich frage mich, ob jemand weiß, warum CodeGear (oder ein Framework-Autor für diese Angelegenheit) würde diese Art von Dingen zu tun?

Was noch wichtiger ist: Gibt es angesichts dieses fragmentierten Erbes und elegant Lösung zur Behandlung einer TBitBtn wie ein TButton ?

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X