Button zuviel???? (managed C++)



  • Hab einen eigenartigen Fehler beim .NET fRamework. Ich hab da eine Assembly(DLL) und lade die durch ein Programm und zeige das in ihr enthaltende Formular, was schon jede menge steuerelemente enthält. Das geht soweit auch ohne probleme.
    Jetzt will ich beim Formular ein zusätzlichen Button hinzufügen, und -schwupps- lässt sich das Formular nicht mehr laden. Stattdessen kommt ein fehler .
    Wer mir helfen will, hier dieProgramme (mit/ohne FEhler; Source): ftp://phili_wendt@rednose.dyndns.org/

    für die Exes bracht man aber das .NET Framework und für den Source (einfach zum test mal ein Button einfügen und die Reaktion bemerken) braucht man C++ .NET

    Danke für jede Hilfe

    mfg rednose



  • Hi!

    Du hättest noch sagen sollen das man einfach Enter drücken muss bei der Bestätigung des PW. 😉

    Code-Hacker



  • stimmt, passwort gibt es keins.

    mfg rednose

    PS: mir würde es auch helfen, ob jemand sagt, dass er mit zusätzlichem button eine funktionsfähige version basteln kann, mein VC++ spinnt grade sowieso ein bisschen rum, evtl is mein code ja funtionstüchtig



  • Das ist eindeutig ein Bug von VS (oder auch von deinem kapputen Projekt).

    Hier die Erkläerung und Lösung:

    Hier ist Ausschnitt aus deiner GesturesDlg-Klasse

    public __gc class GesturesDlg : public System::Windows::Forms::Form
    {
    public: 
    	rednose::Gestures::Gesture* gest;
    	System::Drawing::Point lastpoint;
    	Boolean allowDraw;
    
    	GesturesDlg(void)
    	{
    		gest = new rednose::Gestures::Gesture();
    		InitializeComponent();
    	}
    
    ...
    

    der Konstruktor der Klasse GesturesDlg() liegt, wie es sich auch gehört (in diesem Fall), im public Abschnitt der Klasse.

    Wenn du jetzt ein neues Element zu deinem Dialog hinzufügst, fügt VS eine neue Zeile in die Klasse ein. Dummerweise an falscher Stelle:

    public __gc class GesturesDlg : public System::Windows::Forms::Form
    {
    public: 
    	rednose::Gestures::Gesture* gest;
    	System::Drawing::Point lastpoint;
    
    	private: System::Windows::Forms::Button *  button2; // <=======
    
    		 Boolean allowDraw;
    	GesturesDlg(void)
    	{
    		gest = new rednose::Gestures::Gesture();
    		InitializeComponent();
    	}
    ...
    

    Siehe Zeile mit button2. Damit gerät der Klassenkonstruktor automatisch in private Abschnitt und das bedeutet, dass kein Standardkonstruktor mehr zur Verfüging steht, um Klasse zu erzeugen.

    Lösung ist, diese Zeile einfach zu allen weiteren "private" Zeilen verschieben.

    protected: 
    	void Dispose(Boolean disposing)
    	{
    		if (disposing && components)
    		{
    			components->Dispose();
    		}
    		__super::Dispose(disposing);
    	}
    private: System::Windows::Forms::Button *  button2;  // <=======
    private: System::Windows::Forms::TabControl *  tabControl1;
    private: System::Windows::Forms::TabPage *  manageGestures;
    
    ...
    

Anmelden zum Antworten