C# Een variabele uit een form inlezen in een andere klasse?

Pagina: 1
Acties:

Onderwerpen


  • BramCoding
  • Registratie: Maart 2016
  • Laatst online: 07-08 14:16
Hoi allemaal, ik moet voor een opdracht het spel Monopoly implementeren in C#. Ik gebruik hiervoor Visual Studio maar stootte op een probleem.

Ik heb een form en in die form heb ik een List die public is:
C#:
1
2
3
4
5
6
7
8
9
10
11
12
13
namespace Monopoly.Forms
{
    public partial class FormSpelerKeuze : Form
    {
        public List<Speler> spelersLijst = new List<Speler>(); //HET GAAT OM DEZE LIJST

        public FormSpelerKeuze()
        {
          
        }

        }
}


Nu wil ik graag in een andere klasse deze lijst 'spelersLijst' inlezen/gebruiken. Hoe doe ik dit? Ik probeerde al een instantie van de Form te maken in mijn klasse en dit dan zo te doen:
C#:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
namespace Monopoly
{
    
    public class Speelbord
    {
        FormSpelerKeuze testform = new FormSpelerKeuze();
        List<Speler> testSpelersLijst = testform.spelersLijst;


        public Speelbord() //Constructor voor het speelbord
        {
            aanmakenVakjes();         
        }

        
    }

    
}


Maar in deze klasse herkent hij zelf na aanmaken van het object mijn object 'testform' niet?
Doe ik dit helemaal verkeerd? Ik dacht dat als je variabelen uit de ene klasse wil inlezen in de anderen, je eerst een instantie moest maken van die klasse en dit dan gewoon kon gebruiken?

Alvast bedankt

[ Voor 8% gewijzigd door RobIII op 25-12-2016 15:31 ]


  • jip_86
  • Registratie: Juli 2004
  • Laatst online: 17-09 15:19
Je kan geen code typen in de klasse zelf, dat moet in een functie of in de constructor. Daarbuiten mag je wel de variabele een waarde geven zo als je bijv de eerste keer met spelerslijst doet. Wat je daarmee doet moet in een functie of in de constructor.

Acties:
  • 0 Henk 'm!

Verwijderd

Het is wel VB.NET maar het principe is het zelfde.


Wat ik zou doen is in de constructor van "Speelbord" een (Byval Spelers as list of string)
zodat als de classe wordt geinstanceerd er een lijst moet worden meegeven aan de instantie welke je vervolgens in een Private m_PlayerList as list of string in de class "Spelerbord" kunt opslaan en gebruiker.

Visual Basic .NET:
1
2
3
4
5
6
7
8
9
10
public class Speelbord
  
  Private m_PlayerList as new (list of String)

  public sub new (Byval Spelers as list of string)
      m_PlayerList=Spelers
  end sub


End class

[ Voor 1% gewijzigd door RobIII op 25-12-2016 15:32 ]


Acties:
  • 0 Henk 'm!

  • RobIII
  • Registratie: December 2001
  • Niet online

RobIII

Admin Devschuur®

^ Romeinse Ⅲ ja!

(overleden)
@BramVanha en Magefury: Als jullie code posten, willen jullie dan a.u.b. code tags gebruiken?

There are only two hard problems in distributed systems: 2. Exactly-once delivery 1. Guaranteed order of messages 2. Exactly-once delivery.

Je eigen tweaker.me redirect

Over mij


Acties:
  • 0 Henk 'm!

  • Marco1994
  • Registratie: Juli 2012
  • Laatst online: 17-09 19:16
Wat je wil doen is in je form een instantie maken van speelbord. Vervolgens maak je in speelbord een public void setSpelersLijst(List<Speler> spelersLijst) zodat je in die functie je lokale variabele kan setten. Google eens naar c# get and set methods

Acties:
  • 0 Henk 'm!

  • Daos
  • Registratie: Oktober 2004
  • Niet online
Wat je nu hebt/probeert is een Speelbord en daarin wil je een Form benaderen. Handiger/mooier is andersom: maak in (de constructor van) je Form een instantie van je Speelbord. De spelerslijst bewaar je dan in je speelbord. Wat buurman hierboven ook zegt.

Dit gaat trouwens ook niet werken
C#:
1
2
FormSpelerKeuze testform = new FormSpelerKeuze();
List<Speler> testSpelersLijst = testform.spelersLijst;


Een klasse is een soort bouwtekening waarmee je objecten maakt. Objecten maak je daarvan met 'new'. De variabelen (ookwel velden genoemd) staan niet in de klassen, maar in de objecten die je ervan maakt. De inhoud kan per object verschillend zijn. Wat jij hier doet is een nieuw FormSpelerKeuze-object aanmaken en daar een lijst van uitlezen. Omdat dit een ander object is dan het Form-object dat je ziet op je beeldscherm, zal/kan ook de lijst met spelers anders/leeg zijn.

[ Voor 7% gewijzigd door Daos op 25-12-2016 16:04 ]

Pagina: 1