Willkommen auf myCSharp.de! Anmelden | kostenlos registrieren
 | Suche | FAQ

Hauptmenü
myCSharp.de
» Startseite
» Forum
» Suche
» Regeln
» Wie poste ich richtig?

Mitglieder
» Liste / Suche
» Wer ist online?

Ressourcen
» FAQ
» Artikel
» C#-Snippets
» Jobbörse
» Microsoft Docs

Team
» Kontakt
» Cookies
» Spenden
» Datenschutz
» Impressum

'Form1.components' is never assigned to, and will always have its default value null
Theki
myCSharp.de - Member



Dabei seit:
Beiträge: 55

Themenstarter:

'Form1.components' is never assigned to, and will always have its default value null

beantworten | zitieren | melden

Hallo zusammen,

vor einigen Wochen habe ich die Beta von VS 2010 mal installiert. Zuvor programmierte ich mit VS2005.

Nun fällt mir auf, dass ich beim compilieren für jedes Form eine Warnung bekomme.
Zitat
Field 'Application1.Form1.components' is never assigned to, and will always have its default value null

Ich hatte mich schon einmal schlau gemacht und im Internet gefunden, dass man follgenden Codeausschnitt im Degsiner hinzufügen muss:


            this.components = new System.ComponentModel.Container();

Dies klappt dann auch wunderbar, bis zu dem Punkt wo man Veränderungen an dem Form vornimmt.

Ich finde diese Meldung einfach nervend ;)
Weiß jemand wie ich den Fehler behebe?

Viele Dank im voraus
private Nachricht | Beiträge des Benutzers
inflames2k
myCSharp.de - Experte

Avatar #AARsmmPEUMee0tQa2JoB.png


Dabei seit:
Beiträge: 2.296

beantworten | zitieren | melden

Hm, ich arbeite im Unternehmen auch mit Visual Studio 2005 und hab damit keine Probleme. // Huch sehe grad, Visual Studio 2010. - Naja aber an sich dürfte es nicht viel anders sein.

Zum vergleich geb ich mal an, was erstellt wird, wenn ich ein neues Form erstelle:

TestForm.cs


public partial class TestForm : Form
	{
		public TestForm()
		{
			InitializeComponent();
		}
	}

TestForm.Designer.cs


partial class TestForm
	{
		/// <summary>
		/// Erforderliche Designervariable.
		/// </summary>
		private System.ComponentModel.IContainer components = null;

		/// <summary>
		/// Verwendete Ressourcen bereinigen.
		/// </summary>
		/// <param name="disposing">True, wenn verwaltete Ressourcen gelöscht werden sollen; andernfalls False.</param>
		protected override void Dispose(bool disposing)
		{
			if (disposing && (components != null))
			{
				components.Dispose();
			}
			base.Dispose(disposing);
		}

		#region Vom Windows Form-Designer generierter Code

		/// <summary>
		/// Erforderliche Methode für die Designerunterstützung.
		/// Der Inhalt der Methode darf nicht mit dem Code-Editor geändert werden.
		/// </summary>
		private void InitializeComponent()
		{
			this.components = new System.ComponentModel.Container();
			this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
			this.Text = "TestForm";
		}

		#endregion
	}

Erstellt wird das ganze automatisch und Änderungen an der Form sind ebenfalls Problemlos machbar. - Gibt es denn abweichungen zu dem, was du erhältst wenn du ein neues Form anlegst?

Eventuell kannst du ja auch mal schaun ob die Templates noch in Ordnung sind. - Diese dürftest du irgendwo im Programmpfad finden.
Dieser Beitrag wurde 1 mal editiert, zum letzten Mal von inflames2k am .
Wissen ist nicht alles. Man muss es auch anwenden können.

PS Fritz!Box API - TR-064 Schnittstelle | PS EventLogManager | Spielkartenbibliothek
private Nachricht | Beiträge des Benutzers
Theki
myCSharp.de - Member



Dabei seit:
Beiträge: 55

Themenstarter:

beantworten | zitieren | melden

Bei mir sieht es so aus:


   partial class Form1
    {
        /// <summary>
        /// Required designer variable.
        /// </summary>
        private System.ComponentModel.IContainer components;

        /// <summary>
        /// Clean up any resources being used.
        /// </summary>
        /// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>
        protected override void Dispose(bool disposing)
        {
            if (disposing && (components != null))
            {
                components.Dispose();
            }
            base.Dispose(disposing);
        }

        #region Windows Form Designer generated code

        /// <summary>
        /// Required method for Designer support - do not modify
        /// the contents of this method with the code editor.
        /// </summary>
        private void InitializeComponent()
        {
            System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(Form1));

So wenn ich nun:

            this.components = new System.ComponentModel.Container();

einfügen und was änder an der Form ist dieser Teil wieder weg :/
private Nachricht | Beiträge des Benutzers
robbyrc
myCSharp.de - Member



Dabei seit:
Beiträge: 317
Herkunft: Passau

beantworten | zitieren | melden

Hi,

versuch mal Components im Code manuell auf null zu setzen:


private System.ComponentModel.IContainer components = null;

Das sollte der Designer nicht überschreiben, und die Warnung sollte auch weg sein.

Mfg,
Daniel
Dieser Beitrag wurde 1 mal editiert, zum letzten Mal von robbyrc am .
private Nachricht | Beiträge des Benutzers
Theki
myCSharp.de - Member



Dabei seit:
Beiträge: 55

Themenstarter:

beantworten | zitieren | melden

Perfekt, nach ersten Test's scheint er es echt zu übernehmen. Auch wenn ich immer noch nicht verstehe warum er rummeckert.

Vielen Danke :)
private Nachricht | Beiträge des Benutzers
robbyrc
myCSharp.de - Member



Dabei seit:
Beiträge: 317
Herkunft: Passau

beantworten | zitieren | melden

Das steht doch in der Fehlermeldung warum er meckert ;)
Zitat
Field 'Application1.Form1.components' is never assigned to, and will always have its default value null


private System.ComponentModel.IContainer components;

In diesem Fall weist du der components-Variable, wie der Fehler sagt, nie einen Wert zu, und er ist immer null.

Sobald du ihm nun null manuell zuweist, kommt die Meldung nicht mehr, da du ihm ja etwas zuweist - auch wenn es nur null ist, aber der compiler weiß nun, dass das absichtlich auf null gesetzt wird, und nicht vergessen wurde.

Mfg,
Daniel
private Nachricht | Beiträge des Benutzers