Menü verschwindet, wenn zweites Frame aufgerufen wird



  • Hallo!

    Ich habe in meinem Programm 2 Forms: MainForm und SecondForm.
    Außerdem habe ich weiter einen Frame, in dem ein MainMenu mit all seinen Elementen drin ist.
    Diesen Frame binde ich in MainForm ein. MainForm hat auch ein MainMenu, das folgendermaßen initialisiert wird:

    MainForm::MyMainMenu->Merge(MyFrame->MyMainMenu);
    

    Wenn ich in der MainForm SecondForm aufrufe(mit Show() oder ShowModal()), dann verschwindt komischerweise mein Menü.

    Warum?



  • Wenn du wirklich Hilfe brauchst, solltest du etwas Code zeigen. Die wenigsten hier haben eine Glaskugel und wenn, ist sie kaputt 🙂



  • Hier eine Minimalversion, bei der der Fehler auftritt:

    Main.h

    //-------------------------------------------------------------------------
    #ifndef MainH
    #define MainH
    //---------------------------------------------------------------------------
    #include <Classes.hpp>
    #include <Controls.hpp>
    #include <StdCtrls.hpp>
    #include <Forms.hpp>
    #include "FrameMenue.h"
    #include <Menus.hpp>
    //---------------------------------------------------------------------------
    class Thauptfenster : public TForm
    {
    __published:	// IDE-managed Components
    	TFrHauptmenue *FRHauptmenue;
    	TMainMenu *hauptmenue;
    private:	// User declarations
    public:		// User declarations
    	__fastcall Thauptfenster(TComponent* Owner);
    	void zeigeFenster();
    };
    //---------------------------------------------------------------------------
    extern PACKAGE Thauptfenster *hauptfenster;
    //---------------------------------------------------------------------------
    #endif
    

    Main.cpp

    //---------------------------------------------------------------------------
    
    #include <vcl.h>
    #pragma hdrstop
    
    #include "Main.h"
    #include "SekFenster.h"
    
    //---------------------------------------------------------------------------
    #pragma package(smart_init)
    #pragma link "FrameMenue"
    #pragma resource "*.dfm"
    Thauptfenster *hauptfenster;
    //---------------------------------------------------------------------------
    __fastcall Thauptfenster::Thauptfenster(TComponent* Owner)
    	: TForm(Owner)
    {
    	this->hauptmenue->Merge(FRHauptmenue->hauptmenue);
    }
    //---------------------------------------------------------------------------
    void Thauptfenster::zeigeFenster()
    {
    	sekundaerFenster->Show();
    }
    

    SekFenster.h

    //---------------------------------------------------------------------------
    
    #ifndef SekFensterH
    #define SekFensterH
    //---------------------------------------------------------------------------
    #include <Classes.hpp>
    #include <Controls.hpp>
    #include <StdCtrls.hpp>
    #include <Forms.hpp>
    //---------------------------------------------------------------------------
    class TsekundaerFenster : public TForm
    {
    __published:	// IDE-managed Components
    private:	// User declarations
    public:		// User declarations
    	__fastcall TsekundaerFenster(TComponent* Owner);
    };
    //---------------------------------------------------------------------------
    extern PACKAGE TsekundaerFenster *sekundaerFenster;
    //---------------------------------------------------------------------------
    #endif
    

    SekFenster.cpp

    //---------------------------------------------------------------------------
    
    #include <vcl.h>
    #pragma hdrstop
    
    #include "SekFenster.h"
    //---------------------------------------------------------------------------
    #pragma package(smart_init)
    #pragma resource "*.dfm"
    TsekundaerFenster *sekundaerFenster;
    //---------------------------------------------------------------------------
    __fastcall TsekundaerFenster::TsekundaerFenster(TComponent* Owner)
    	: TForm(Owner)
    {
    }
    //---------------------------------------------------------------------------
    

    FrameMenue.h

    //---------------------------------------------------------------------------
    
    #ifndef FrameMenueH
    #define FrameMenueH
    //---------------------------------------------------------------------------
    #include <Classes.hpp>
    #include <Controls.hpp>
    #include <StdCtrls.hpp>
    #include <Forms.hpp>
    #include <Menus.hpp>
    //---------------------------------------------------------------------------
    class TFrHauptmenue : public TFrame
    {
    __published:	// IDE-managed Components
    	TMainMenu *hauptmenue;
    	TMenuItem *MIDatei;
    	TMenuItem *MIOeffnen;
    	void __fastcall MIOeffnenClick(TObject *Sender);
    private:	// User declarations
    public:		// User declarations
    	__fastcall TFrHauptmenue(TComponent* Owner);
    };
    //---------------------------------------------------------------------------
    extern PACKAGE TFrHauptmenue *FrHauptmenue;
    //---------------------------------------------------------------------------
    #endif
    

    FrameMenue.cpp

    //---------------------------------------------------------------------------
    
    #include <vcl.h>
    #pragma hdrstop
    
    #include "FrameMenue.h"
    #include "Main.h"
    
    //---------------------------------------------------------------------------
    #pragma package(smart_init)
    #pragma resource "*.dfm"
    TFrHauptmenue *FrHauptmenue;
    //---------------------------------------------------------------------------
    __fastcall TFrHauptmenue::TFrHauptmenue(TComponent* Owner)
    	: TFrame(Owner)
    {
    }
    //---------------------------------------------------------------------------
    void __fastcall TFrHauptmenue::MIOeffnenClick(TObject *Sender)
    {
    	hauptfenster->zeigeFenster();
    }
    //---------------------------------------------------------------------------
    

    Project1.cpp

    //---------------------------------------------------------------------------
    
    #include <vcl.h>
    #pragma hdrstop
    #include <tchar.h>
    //---------------------------------------------------------------------------
    USEFORM("Main.cpp", hauptfenster);
    USEFORM("FrameMenue.cpp", FrHauptmenue); /* TFrame: File Type */
    USEFORM("SekFenster.cpp", sekundaerFenster);
    //---------------------------------------------------------------------------
    WINAPI _tWinMain(HINSTANCE, HINSTANCE, LPTSTR, int)
    {
    	try
    	{
    		Application->Initialize();
    		Application->MainFormOnTaskBar = true;
    		Application->CreateForm(__classid(Thauptfenster), &hauptfenster);
    		Application->CreateForm(__classid(TsekundaerFenster), &sekundaerFenster);
    		Application->Run();
    	}
    	catch (Exception &exception)
    	{
    		Application->ShowException(&exception);
    	}
    	catch (...)
    	{
    		try
    		{
    			throw Exception("");
    		}
    		catch (Exception &exception)
    		{
    			Application->ShowException(&exception);
    		}
    	}
    	return 0;
    }
    //---------------------------------------------------------------------------
    


  • Die Menüeinträge verschwinden sobald man einen Eintrag im Menü geklickt hat, sind scheinbar (?) nur flüchtig vorhanden.

    Ich verstehe zwar nicht was du damit bezwecken willst, deine Vorgehensweise ist irgendwie merkwürdig.



  • Maverick schrieb:

    Die Menüeinträge verschwinden sobald man einen Eintrag im Menü geklickt hat, sind scheinbar (?) nur flüchtig vorhanden.

    Ne. Solange ich kein zweites Fenster aufrufe, verschwindet da nichts.
    Meine Vermutung ist, dass sobald das zweite Fenster aufgeht, irgendein Event im ersten Fenster ausgelöst wird, der das Frame (in dem das Menü drin ist) verschwinden lässt.


Log in to reply