Gå til innhold

[LØST] Visual C#, åpne en form i modul spm.


Anbefalte innlegg

Heisann!

 

Kom over et "lite" problem her. I VB.NET gjør jeg følgende:

 

Jeg har en from som fungerer som Meny, hvor følgende skjer når jeg lukker den og laster en ny "hoved" form:

 

frmMain.Show()

Me.Hide()

 

Og i frmMain Load så skjer dette:

 

Population = frmMenu.TxtPopulation.Text

 

Altså data hentes fra frmMenu og lastes i en String i frmMain.

 

Så kommer problemet, jeg vil gjerne gjøre dette i C#. Ved å feks ha en hovedform, og jeg åpner da en "settings" form hvor jeg forandrer på Variabler som er i hovedformen.

 

Håper noen skjønner dette og kan hjelpe meg :p

Endret av Stig Jøran
Lenke til kommentar
Videoannonse
Annonse
Du kan feks lagre verdiene i public variabler i "settings form" og etter at du har lukket denne formen (OK-knapp), så henter du ut verdiene fra settings form-objektet via public-variablene. Easy-peasy ;)

 

Men hvordan vet formen når jeg lukker settings formen?

Må jo være en måte i C# å gjøre slik som i VB.

 

Og feks når jeg har et Object:

 

public partial class frmMain : Form

{

// New Object, player.

Player Human = new Player();

}

 

Så kan jeg ikke få tilgang til det annet enn via frmMain. Kan noen hjelpe meg med å forstå hvorfor?

Endret av Stig Jøran
Lenke til kommentar

Skal du da ha tilgang til Human må den for det første være public. fra en annen klasse må du da instansiere frmMain for å få tilgang til Human, hvis du ikke definerer den som static.

 

dette funker:

class Class1
{
public static string Var = "Hello World!";
}

class Class2
{
static void Main()
{
Console.WriteLine(Class1.Var);
}
}

eller dette:

class Class1
{
public string Var = "Hello World!";
}

class Class2
{
static void Main()
{
Class1 c1 = new Class1();
Console.WriteLine(c1.Var);
}
}

Lenke til kommentar

class Class1
{
public string Var = "Hello World!";
}

class Class2
{
static void Main()
{
Class1 c1 = new Class1();
Console.WriteLine(c1.Var);
}
}

 

Det får jeg til, men når jeg da har en til form, som skal accesse c1 som ble "laget" i den andre formen får jeg det ikke til.

 

Alle mine verdier i Player.cs er public:

 

public UInt32 Cash
   {
	   set { _cash = value; }
	   get { return _cash; }
   }

 

Men i hoveformen min har jeg følgende kode som lager et objekt av klassen min:

 

namespace LifeBiz
{

public partial class frmMain : Form
{

	// New Object, player. 
	Player Human = new Player();
}
}

 

Så skal jeg da ha noe i en annen form:

 

public partial class frmMenu : Form
{


	private void frmMenu_Load(object sender, EventArgs e)
	{

	 // Her skulle jeg gjerne hatt tilgang til det objektet som ble laget i frmMain.

	}
}

Endret av Stig Jøran
Lenke til kommentar

Legg player-objektet ved i konstruktøren til frmMenu-klassen

 

public partial class frmMenu : Form
{
Player player;
public frmMenu(Player player)
{
	 this.player = player;
}
private void frmMenu_Load(object sender, EventArgs e)
{

	 // Nå har du tilgang til player-objektet

 }
}

Endret av Spartakus
Lenke til kommentar

Det funker delvis, men får ikke hentet noe ut av objektet.

 

MessageBox.Show(player.Age.ToString());

 

"Object reference not set to an instance of an object."

 

" Use the new keyword to create an instance"

 

Men problemet da er at da er vil tilbake på det at et nytt objekt blir laget.

Og det gamle Human objektet som jeg skulle ha hentet ut Alderen på går ikke :(

 

Slenger med et eksempel på hva jeg prøver å få til. Åpnes i VC# 2008 Exp.

WindowsFormsApplication1.zip

Endret av Stig Jøran
Lenke til kommentar

Det er nå du burde lære deg å debugge programmet ;)

Velg linjen med messagebox eller der det stopper, og trykk F9

Trykk deretter på F5

 

Når du nå kommer til punktet der programmet kræsjer, vil Visual Studio istedet pause programmet, og du kan se hva innholdet i variablene er ved å holde over dem.

 

Hvis en av de er null (Det er det "object reference not set to an instance of an object" betyr), har du funnet problemet ditt.

Lenke til kommentar
Det er nå du burde lære deg å debugge programmet ;)

Velg linjen med messagebox eller der det stopper, og trykk F9

Trykk deretter på F5

 

Når du nå kommer til punktet der programmet kræsjer, vil Visual Studio istedet pause programmet, og du kan se hva innholdet i variablene er ved å holde over dem.

 

Hvis en av de er null (Det er det "object reference not set to an instance of an object" betyr), har du funnet problemet ditt.

 

Ja det er vel fordi at :

 

Player player;
	public frmMenu(Player player)
	{
		this.player = player;
	}

 

Henviser til player.cs (classen)? Og ikke selveste objektet som ble "new" i hovedformen?

 

Kan jeg få den til å henvise til objektet Human som faktisk eksisterer?

 

EDIT;

 

Men hvis du ser på eksemplet jeg la med i posten ovenfor, så viser det problemet bedre.

Fordi jeg vet ikke om jeg forklarer godt nok hva jeg mener. :S

Endret av Stig Jøran
Lenke til kommentar
Du lager en variabel som heter player av typen Player (som du vet, gjør C# forskjell på stor og små bokstaver)

Men jeg kan ikke se hvor du setter en verdi til player.

 

Så lenge player er null, kan du heller ikke endre noen verdier, da null er et ugyldig minneområde.

 

Nei, Player er en class Player.cs, og i hovedformen så gjøres dette:

 

namespace LifeBiz
{

public partial class frmMain : Form
{

	// New Object, player.
	Player Human = new Player();
}
}

 

Altså Human er det nye objektet, fra playerclassen(Player.cs).

 

Og problemet er å få skrive/lese tilgang til Human utenfor frmMain.

Innenfor kan jeg få tilgang til alle de forskjellige variablene som er i Human objektet.

 

Hvis jeg bruker Player Human2 = new Player(); Så lager den et nytt objekt, og jeg får tilgang til det. Men jeg vil ha tilgang til det som ble laget først.

 

Hvordan kan det gjøres?

Endret av Stig Jøran
Lenke til kommentar

Opprett en konto eller logg inn for å kommentere

Du må være et medlem for å kunne skrive en kommentar

Opprett konto

Det er enkelt å melde seg inn for å starte en ny konto!

Start en konto

Logg inn

Har du allerede en konto? Logg inn her.

Logg inn nå
×
×
  • Opprett ny...