Laden...

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

Erstellt von Theki vor 14 Jahren Letzter Beitrag vor 14 Jahren 2.850 Views
T
Theki Themenstarter:in
55 Beiträge seit 2009
vor 14 Jahren
'Form1.components' is never assigned to, and will always have its default value null

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.

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

2.298 Beiträge seit 2010
vor 14 Jahren

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.

Wissen ist nicht alles. Man muss es auch anwenden können.

PS Fritz!Box API - TR-064 Schnittstelle | PS EventLogManager |

T
Theki Themenstarter:in
55 Beiträge seit 2009
vor 14 Jahren

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 😕

R
317 Beiträge seit 2006
vor 14 Jahren

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

T
Theki Themenstarter:in
55 Beiträge seit 2009
vor 14 Jahren

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

Vielen Danke 😃

R
317 Beiträge seit 2006
vor 14 Jahren

Das steht doch in der Fehlermeldung warum er meckert 😉

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