Form Designer - Fehlermeldung



  • Hallo,

    Ich habe jetzt bei einem meiner Formulare das Problem, dass sobald ich ein
    Label auf den Form Designer ziehe der Formdesigner mit der folgenden Fehlermeldung nicht mehr geladen wird:

    Ein zirkulärer Steuerelementverweis ist entstanden. Ein Steuerelement kann nicht sich selbst besitzen oder übergeordnet sein.

    Instanzen dieses Fehlers (1)

    1. Aufrufliste ausblenden

    bei System.Windows.Forms.Control.CheckParentingCycle(Control bottom, Control toFind)
    bei System.Windows.Forms.Control.ControlCollection.Add(Control value)
    bei System.Windows.Forms.Form.ControlCollection.Add(Control value)
    bei System.Windows.Forms.Design.ControlDesigner.DesignerControlCollection.Add(Control c)

    Erst wenn ich das Label wieder aus dem vom Designer generierten Code loesche funktioniert der Formdesigner wieder.
    Wenn ich auf 'ignorieren' gehe kann ich eh alle anderen Steuerelemente vergessen.
    In anderen Projekten habe ich das Problem nicht... kennt jemand den Fehler?

    Bis dann

    David





  • Naja... gegoogelt habe ich auch.
    Man findet den Fehler zwar aber die Leute vor mir hatten alle ein anderes Problem.
    Der Quelltext meines Formulares ist der Folgende:
    (Es gehschieht jetzt sogar ohne Labeleigenschaften)

    Edit: Naja - jetzt ne compilierbare Version

    #pragma once
    
    using namespace System;
    using namespace System::ComponentModel;
    using namespace System::Collections;
    using namespace System::Windows::Forms;
    using namespace System::Data;
    using namespace System::Drawing;
    
    namespace Labeltst {
    
    	/// <summary>
    	/// Zusammenfassung für Form1
    	///
    	/// Warnung: Wenn Sie den Namen dieser Klasse ändern, müssen Sie auch
    	///          die Ressourcendateiname-Eigenschaft für das Tool zur Kompilierung verwalteter Ressourcen ändern,
    	///          das allen RESX-Dateien zugewiesen ist, von denen diese Klasse abhängt.
    	///          Anderenfalls können die Designer nicht korrekt mit den lokalisierten Ressourcen
    	///          arbeiten, die diesem Formular zugewiesen sind.
    	/// </summary>
    	public ref class Form1 : public System::Windows::Forms::Form
    	{
    	public:
    		Form1(void)
    		{
    			InitializeComponent();
    			//
    			//TODO: Konstruktorcode hier hinzufügen.
    			//
    		}
    
    	protected:
    		/// <summary>
    		/// Verwendete Ressourcen bereinigen.
    		/// </summary>
    		~Form1()
    		{
    			if (components)
    			{
    				delete components;
    			}
    		}
    	private: System::Windows::Forms::Button^  btnexit;
    	private: System::Windows::Forms::Label^  lbltelefon;
    	protected: 
    
    	protected: 
    
    	private:
    		/// <summary>
    		/// Erforderliche Designervariable.
    		/// </summary>
    		System::ComponentModel::Container ^components;
    
    #pragma region Windows Form Designer generated code
    		/// <summary>
    		/// Erforderliche Methode für die Designerunterstützung.
    		/// Der Inhalt der Methode darf nicht mit dem Code-Editor geändert werden.
    		/// </summary>
    		void InitializeComponent(void)
    		{
    			System::ComponentModel::ComponentResourceManager^  resources = (gcnew System::ComponentModel::ComponentResourceManager(Form1::typeid));
    			this->btnexit = (gcnew System::Windows::Forms::Button());
    			this->lbltelefon = (gcnew System::Windows::Forms::Label());
    			this->SuspendLayout();
    			// 
    			// btnexit
    			// 
    			this->btnexit->FlatStyle = System::Windows::Forms::FlatStyle::Flat;
    			this->btnexit->Location = System::Drawing::Point(413, 365);
    			this->btnexit->Name = L"btnexit";
    			this->btnexit->Size = System::Drawing::Size(75, 23);
    			this->btnexit->TabIndex = 0;
    			this->btnexit->Text = L"OK";
    			this->btnexit->UseVisualStyleBackColor = true;
    			this->btnexit->Click += gcnew System::EventHandler(this, &Form1::btnexit_Click);
    			// 
    			// Form1
    			// 
    			this->AutoScaleDimensions = System::Drawing::SizeF(6, 13);
    			this->AutoScaleMode = System::Windows::Forms::AutoScaleMode::Font;
    			this->ClientSize = System::Drawing::Size(500, 400);
    		    this->Controls->Add(this->lbltelefon);
    			this->Controls->Add(this->btnexit);
    			this->FormBorderStyle = System::Windows::Forms::FormBorderStyle::None;
    			this->Name = L"Form1";
    			this->Text = L"frmcredits1";
    			this->ResumeLayout(false);
    			this->PerformLayout();
    
    		}
    #pragma endregion
    	private: System::Void btnexit_Click(System::Object^  sender, System::EventArgs^  e) 
    			 {
    				 this->Hide();
    			 }
    	};
    }
    

    Ich kann nirgens etwas finden, wo ein Steuerelement sich selbst einbindet oder so...

    Edit:

    Habe aber auch das Gefuehl, dass es an einer anderen Datei in Projekt liegt.
    Obwohl es eigentlich geht und nur dann wenn ich das Label hinzufuege gibts Probleme... im Designer.



  • Es gab mal einen Beitrag der sich mit den "Merkwürdigkeiten" des Formdesigners beschäftigte (der aber nun fehlt ?!).

    Kurzform:

    Schließe mal das Projekt (inkl. VS) , lösche die ncb Datei, öffne das Projekt und warte bis bei Klassenansicht keine Klasse mehr gescannt wird.

    Ob es bei dem Problem hilft - ka. Aber manchmal ist das kicken der ncb Datei soetwas wie ein Allheilmittel.



  • Vielen Dank fuers darueber Nachdenken.
    Es ist bei diesem Problem aber auch schwer die Frage zu stellen, weil ich ja schlecht mein ganzes Projekt hier rein kopieren kann. 🙂

    Ich habe das Problem jetzt einfach so geloest, dass ich das Formular geloescht und ein neues eingefuegt habe.
    Wenn ich das Formular mit dem selben Namen, den es vorher hatte einfuege kommt der selbe Fehler wieder.
    Nenne ich es anders laeufts... da mir der Name egal war habe ich das jetzt so geloest.
    Da mich solche Probleme aber aergern werde ich in einer freien Minute trotzdem nochmal ein bisschen herumspielen.
    Das mit der Datei loeschen kann ich auch mal noch probieren.



  • hallo,

    schon etwas her das thema hier. es ist der #1 hit bei google bei der suche nach "zirkulärer Steuerelementverweis".

    ich möchte nur bestätigen, dass mein designer wieder funktioniert, seit ich diese NCB datei gelöscht hab. danke an knuddlbaer.



  • Moin Moin.

    Dieses Problem hat meines Wissens nach die beiden Ursachen.:
    1. Die ncb Datenkartei ist defekt (bereits oben genannt)->Studio beenden Projektksmappenname.ncb loeschen.
    2. Der Designer hat vergessen, die Variablen fuer die neuen Steuerelemente zu deklarieren.
    Z.B. kommt in
    ________________________________________________________________________________
    void InitializeComponent(void)
    this->Windows_Dienste_Instanzennamensfrage = (gcnew System::Windows::Forms::TextBox());
    ________________________________________________________________________________

    vor.
    Doch die Vraiable wird nicht erklaert.:
    ->vor "InitializeComponent(void)" bitte
    ________________________________________________________________________________
    private: System::Windows::Forms::TextBox^ Windows_Dienste_Instanzennamensfrage;
    ________________________________________________________________________________
    einfuegen.

    Tschuess,
    Michael Soliman.


Log in to reply