Avatar billede hesus Nybegynder
29. april 2008 - 19:53 Der er 13 kommentarer og
1 løsning

Class either undeclared or never assigned

Forstår ikke hvorfor jeg får følgende fejlmeddelelse:

Warning 2 - The variable 'functions' is either undeclared or was never assigned.        Line 0    Column 0   

Har en form hvor jeg i starten declarerer functions:

private Functions functions;

I formens constructor kalder jeg initializeComponent() hvor i jeg initialiserer functions:

this.functions = new Functions(this);

Der er selvfølgelig oprettet en constructor i functions klassen som tager Formen som argument. Hvordan kan det være jeg får fejlen når det er tydeligt at den både declareres og initialiseres.

Får desuden også en anden mærkelig fejl når initialiserer functions. Den siger at Functions ikke har en constructor som tager en Form som argument. Functions constructoren ser således ud:

public Functions(Form1 form)
        {
            this.form = form;
        }

Det skal lige siges at min form klasse: Form1 selvfølgelig extender Form klassen...
Avatar billede sovsekoder Nybegynder
29. april 2008 - 20:57 #1
kode uden warnings: namespace WindowsApplication2
{
    public partial class Form1 : Form
    {
        private Functions functions;

        public Form1()
        {
            InitializeComponent();
            functions = new Functions(this);
        }
    }

    public class Functions
    {
        Form1 form;
        public Functions(Form1 form)
        {
            this.form = form;
        }
    }
}
Avatar billede hesus Nybegynder
29. april 2008 - 21:40 #2
Nu indsætter jeg lige koden så det måske er nemmere at se.. Den melder stadig fejl i de tre linier som jeg har markeret..

namespace Bach_Test
{
    partial class Form1
    {
        private System.ComponentModel.IContainer components = null;

        private string title = "";

        private Functions functions;
        private MenuBar menu;
        private TabPanel tabControl;
        private System.Windows.Forms.ToolStrip toolStrip1;
        private System.Windows.Forms.ToolStripButton runButton;

        protected override void Dispose(bool disposing)
        {
            if (disposing && (components != null))
            {
                components.Dispose();
            }
            base.Dispose(disposing);
        }

        #region Windows Form Designer generated code


        public Form1()
        {
            this.functions = new Functions(this);
            this.tabControl = new TabPanel(ref functions);
            this.menu = new MenuBar(ref functions);
            InitializeComponent();
        }

        private void InitializeComponent()
        {
            System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(Form1));
           
            this.toolStrip1 = new System.Windows.Forms.ToolStrip();
            this.runButton = new System.Windows.Forms.ToolStripButton();
           
            this.toolStrip1.SuspendLayout();
            this.SuspendLayout();
            //
            // toolStrip1
            //
            this.toolStrip1.Items.AddRange(new System.Windows.Forms.ToolStripItem[] {
            this.runButton});
            this.toolStrip1.Location = new System.Drawing.Point(0, 24);
            this.toolStrip1.Name = "toolStrip1";
            this.toolStrip1.Size = new System.Drawing.Size(669, 25);
            this.toolStrip1.TabIndex = 2;
            this.toolStrip1.Text = "toolStrip1";
            //
            // runButton
            //
            this.runButton.DisplayStyle = System.Windows.Forms.ToolStripItemDisplayStyle.Image;
            this.runButton.Image = ((System.Drawing.Image)(resources.GetObject("runButton.Image")));
            this.runButton.ImageTransparentColor = System.Drawing.Color.Magenta;
            this.runButton.Name = "runButton";
            this.runButton.Size = new System.Drawing.Size(23, 22);
            this.runButton.Text = "Run file";
            this.runButton.Click += new System.EventHandler(this.runButton_Click);
            //
            // Form1
            //
            this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
            this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
            this.ClientSize = new System.Drawing.Size(669, 510);

//-->      this.Controls.Add(this.tabControl);
            this.Controls.Add(this.toolStrip1);
//-->      this.Controls.Add(this.menu);
//-->      this.MainMenuStrip = this.menu;
            this.Name = "Form1";
            this.Text = "LySa Editor";
            this.toolStrip1.ResumeLayout(false);
            this.toolStrip1.PerformLayout();
            this.ResumeLayout(false);
            this.PerformLayout();
        }

        #endregion
    }
}
Avatar billede sovsekoder Nybegynder
29. april 2008 - 22:17 #3
jeg kan ikke se noget problem. måske restart visual studio. ell. fjerne suo-filen.
Avatar billede nielle Nybegynder
30. april 2008 - 11:47 #4
Jeg kan se at du åbenbart selv sidder og skriver/modificere kode i Form1.Designer.cs filen. Det skal du endeligt lade være med, da det er opskriften på alle mulige sære problemer! Lav dine egne tilføjelser i Form1.cs filen i stedet.
Avatar billede nielle Nybegynder
30. april 2008 - 11:51 #5
Du har endda flyttet kode fra Form1.cs over i Form1.Designer.cs. Hvorfor har du gjort det?
Avatar billede hesus Nybegynder
30. april 2008 - 17:04 #6
Flyttede det over bare lige for at have det samlet... bliver det samme, da den jo bare "lægger" filerne sammen... Men var fordi jeg har en user interface med et tabbed panel i midten. Der er så to tabs hvor der i den ene er en tekst editor og i den anden en grafisk editor.. I starten lå disse objekter i hovedfilen Form1, men for at gøre programmet mere struktureret flyttede jeg disse objekter ud i seperate klasse som så extender henholdsvis TabControl og TabPage..
Avatar billede sovsekoder Nybegynder
30. april 2008 - 17:20 #7
din kode puttet i en enkelt fil. Kun 1 warning hvilket går på title. Jeg kan stadig ikke se fejlen?

using System;
using System.Collections.Generic;
using System.Text;
using System.Windows.Forms;

namespace Bach_Test
{
    class Form2 : System.Windows.Forms.Form
    {
        private System.ComponentModel.IContainer components = null;

        private string title = "";

        private Functions functions;
        private MenuBar menu;
        private TabPanel tabControl;
        private System.Windows.Forms.ToolStrip toolStrip1;
        private System.Windows.Forms.ToolStripButton runButton;

        protected override void Dispose(bool disposing)
        {
            if (disposing && (components != null))
            {
                components.Dispose();
            }
            base.Dispose(disposing);
        }

        #region Windows Form Designer generated code


        public Form2()
        {
            this.functions = new Functions(this);
            this.tabControl = new TabPanel(ref functions);
            this.menu = new MenuBar(ref functions);
            InitializeComponent();
        }

        private void InitializeComponent()
        {
            System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(Form2));

            this.toolStrip1 = new System.Windows.Forms.ToolStrip();
            this.runButton = new System.Windows.Forms.ToolStripButton();

            this.toolStrip1.SuspendLayout();
            this.SuspendLayout();
            //
            // toolStrip1
            //
            this.toolStrip1.Items.AddRange(new System.Windows.Forms.ToolStripItem[] {
            this.runButton});
            this.toolStrip1.Location = new System.Drawing.Point(0, 24);
            this.toolStrip1.Name = "toolStrip1";
            this.toolStrip1.Size = new System.Drawing.Size(669, 25);
            this.toolStrip1.TabIndex = 2;
            this.toolStrip1.Text = "toolStrip1";
            //
            // runButton
            //
            this.runButton.DisplayStyle = System.Windows.Forms.ToolStripItemDisplayStyle.Image;
            this.runButton.Image = ((System.Drawing.Image)(resources.GetObject("runButton.Image")));
            this.runButton.ImageTransparentColor = System.Drawing.Color.Magenta;
            this.runButton.Name = "runButton";
            this.runButton.Size = new System.Drawing.Size(23, 22);
            this.runButton.Text = "Run file";
            this.runButton.Click += new EventHandler(runButton_Click);
            //
            // Form1
            //
            this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
            this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
            this.ClientSize = new System.Drawing.Size(669, 510);

            //-->      this.Controls.Add(this.tabControl);
            this.Controls.Add(this.toolStrip1);
            //-->      this.Controls.Add(this.menu);
            //-->      this.MainMenuStrip = this.menu;
            this.Name = "Form1";
            this.Text = "LySa Editor";
            this.toolStrip1.ResumeLayout(false);
            this.toolStrip1.PerformLayout();
            this.ResumeLayout(false);
            this.PerformLayout();
        }

        void runButton_Click(object sender, EventArgs e)
        {
            throw new Exception("The method or operation is not implemented.");
        }

        #endregion
    }

    public class Functions
    {
        public Functions(Form f) { }
    }
    public class MenuBar
    {
        public MenuBar(ref Functions functions) { }
    }
    public class TabPanel
    {
        public TabPanel(ref Functions functions) { }
    }

}
Avatar billede hesus Nybegynder
30. april 2008 - 17:52 #8
nej der kommer ingen errors bare warnings om at tabcontrol og menu ikke er declared or was never assigned de steder hvor jeg markerede... Det skal lige siges at de tre klasser ser således ud:

    public class Functions
    {
        public Functions(Form f) { }
    }
    public class MenuBar : System.Windows.Forms.MenuStrip
    {
        public MenuBar(ref Functions functions) { }
    }
    public class TabPanel : System.Windows.Forms.TabControl
    {
        public TabPanel(ref Functions functions) { }
    }


Men de der warnings må vel være grunden til at jeg ikke kan se og modificere min gui i den grafiske editor i visual studio??
Avatar billede sovsekoder Nybegynder
30. april 2008 - 20:15 #9
kan du ikke poste din kode, så jeg bare kan paste den ind i vs2005 og reproducere dit problem. Lige nu peger alt på at det er din solution der er noget galt med, og ikke source-koden.
Avatar billede hesus Nybegynder
01. maj 2008 - 18:37 #10
Ok har uploadet det nu:

http://download.yousendit.com/5561199F142FDD1A

Var det nemmeste sted at dele det. har bare lagt hele projektet der.. fylder ikke så meget.

De der warnings opstår når man trykker på form1 design, dvs. prøver at vise den i det grafiske view...

Tak for hjælpen :)
Avatar billede sovsekoder Nybegynder
05. maj 2008 - 19:46 #11
problemet er at visualstudio designeren kører initialize components, uden din constructor køres. (Jeg tror designeren laver en kopi af din klasse som Form (ikke Form1), og derefter kører InitializeComponents).

Dine variable er derfor ikke initialiserede når InitializeComponents køres af designeren. For at komme uden om dette bør du implementere din afhængighed til Functions via IoC. Således at du laver en property på dine custom-forms, som sætter Functions. Functions sættes i Form1's constructor efter initializeComponents... eks:
        public Form1()
        {

            InitializeComponent();

            // Dependency injection...
            this.functions = new Functions();
            tabControl.Functions = functions;
            menu.Functions = functions;
        }
Avatar billede sovsekoder Nybegynder
05. maj 2008 - 19:49 #12
..hvor TabPanel og MenuBar altså har en property der hedder Function:
public Function Function
{
  get{return function;}
  set{function=value;}
}
Avatar billede hesus Nybegynder
19. maj 2008 - 17:34 #13
Tak for hjælpen. læg et svar for point! :)
Avatar billede sovsekoder Nybegynder
19. maj 2008 - 19:46 #14
svar. - det var så lidt :)
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
IT-kurser om Microsoft 365, sikkerhed, personlig vækst, udvikling, digital markedsføring, grafisk design, SAP og forretningsanalyse.

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester