29. april 2008 - 19:53Der 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...
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();
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.
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..
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();
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) { } }
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??
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.
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() {
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.