[C# - VS2005] Partial classes

Pagina: 1
Acties:

Acties:
  • 0 Henk 'm!

  • Xof
  • Registratie: Juni 2001
  • Laatst online: 12-05 10:38
Ik ben bezig in VS2005 en daarin zit nu partial classes, opzich erg handig. Maar op dit moment voor mij even niet ;)
Ik krijg steeds een warning met "The variable 'player' is either undeclared or was never assigned", erg leuk die warning maar het slaat alleen nergens op. Want alles werkt nml wel gewoon zoals het hoort.

Ik heb een partial class met (ingekort):
C#:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
    public partial class PlayerView : Form
    {
        private PlayerController pcontroller;
        private string name;
        private Player player = new Player();

        public PlayerView(PlayerController pcont, string name)
        {
            this.name = name;
            this.pcontroller = pcont;
            this.player = pcontroller.getPlayer(this.name);
            InitializeComponent();
        }
   }


En daarbij nog een class met (sterk ingekort):
C#:
1
2
3
4
5
6
7
8
    public partial class PlayerView
    {
        private void InitializeComponent()
        {
            this.textBox1 = new System.Windows.Forms.TextBox();
            this.textBox1.Text = this.player.getName();
        }
    }

Zoals je ziet is player gedeclareerd in de eerste partial class, maar de 2e partial class zegt (zogenaamd) dat deze dus nooit gedeclareerd is (op regel 6). Als ik mijn project run krijg ik ook mooi de name van de player te zien in de textbox.
Dan is er toch geen probleem zou je denken, wel dus.. de designmode werkt nu niet meer, omdat deze steeds die warning weergeeft.
Hoe los ik dit op? Opnieuw declareren in de 2e partial class mag niet. (want dan bestaat die wel 8)7)

Acties:
  • 0 Henk 'm!

  • .oisyn
  • Registratie: September 2000
  • Laatst online: 17-09 14:05

.oisyn

Moderator Devschuur®

Demotivational Speaker

Het is ook een error van de windows forms designer, niet van de compiler. De MSDN zegt:
The source code has a reference to a variable, such as Button1,that was never declared or assigned. If it was not assigned, you will get a warning, not an error.
Ik heb geen ervaring met de forms designer, maar die passage doet mij vermoeden dat de forms designer denkt dat player een één of andere control voor moet stellen, maar dat jij 'm in de windows forms designer nooit aan een control gekoppeld hebt.

Give a man a game and he'll have fun for a day. Teach a man to make games and he'll never have fun again.


Acties:
  • 0 Henk 'm!

  • Wmm
  • Registratie: Maart 2002
  • Laatst online: 10:55

Wmm

Edit: wel goed lezen Wmm.

InitializeComponent() wordt door VS zelf gegenereerd. Je kunt er wel wijzigingen in aan gaan brengen, maar dat is geen goed idee. VS genereert uit die code de visuele weergave tijdens het designen, doordat jij zelf dingen gaat aanbrengen weet VS niet meer wat ie moet doen.
Wat jij wilt moet je dus gewoon buiten InitializeComponent() aanbrengen :). B.v. na de aanroep van InitializeComponent() in de constructor.

[ Voor 181% gewijzigd door Wmm op 03-05-2006 22:44 ]


Acties:
  • 0 Henk 'm!

  • Xof
  • Registratie: Juni 2001
  • Laatst online: 12-05 10:38
Nou volgens mij is het probleem dat de designer geen tekst weer kan geven in zijn 'preview' mode en dat die daarom maar een warning geeft en niks laat zien, ik heb een beetje verder zitten testen en als ik een string pname declareer en deze "test" meegeef en deze dan netjes in de textBox1.Text gooi dan komt er in de Designer mode "test" te staan.

Die 'player' is een ArrayList die gevuld wordt bij het starten van de app, maar volgens mij is die designer zo buggy dat die dat niet snapt :( (je hoeft @ google maar iets over designer te gaan zoeken in vs2005 en dan lees je veel klachten).
Ik kom er nu dus achter dat dit niks met de partial classes te maken heeft, maar echt specifiek met de designer mode en niet kunnen uitlezen van variabelen.. waarschijnlijk niks aan te doen :(

Edit: Wmm, ik ga er eens mee spelen :)
Edit2: hmz dat was hem dus
C#:
1
2
            InitializeComponent();
            this.textBox1.Text = this.player.getName();


Ook erg logisch als je er over nadenkt dan doet de designer geen moeite om die waarden weer te geven. Variabele waarden + InitializeComponent() gaan niet samen :)

[ Voor 24% gewijzigd door Xof op 03-05-2006 22:54 ]


Acties:
  • 0 Henk 'm!

Verwijderd

Xof schreef op woensdag 03 mei 2006 @ 22:48:
Ook erg logisch als je er over nadenkt dan doet de designer geen moeite om die waarden weer te geven. Variabele waarden + InitializeComponent() gaan niet samen :)
Als ik het me goed herinner staat er ook in commentaar boven dat je die methode niet moet aanpassen omdat die gebruikt wordt door de forms designer? Althans dat was wel zo in vs.net 2k3...

Acties:
  • 0 Henk 'm!

  • Xof
  • Registratie: Juni 2001
  • Laatst online: 12-05 10:38
/// <summary>
/// Required method for Designer support - do not modify
/// the contents of this method with the code editor.
/// </summary>
:+
Ik had het ook moeten weten, maarja op de een of andere manier was ik koppig :P
Pagina: 1