[C#] Partial Class geeft Control niet door *

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

  • siepeltjuh
  • Registratie: Maart 2003
  • Niet online
Op de search kwam ik \[C# - VS2005] Partial classes tegen het lijk sterk op mijn probleem, maar is toch iets anders zodoende leg ik het volgende voor:

Ik heb via VS c# studio een form gemaakt, ingericht werkt prima totdat ik meerdere tabs gebruik met veel knoppen en toeters en ebllen en ik de verschillende tabs in verschillende partial classes wil aanbrengen om het overzicht te houden.

De eerste partial class die VS aanmaakt met het venster laat ik met rust en heet Form (zoals altijd)

In de tweede partial class die standaard in VS wordt gemaakt staan wat standaard methodes voor scherm control: (sterk ingekort)
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;

namespace YAFT
{
    public partial class Hoofdscherm : Form
    {
        
        public Hoofdscherm()
        {
            InitializeComponent();
        }


        private void YAFTAfsluiten(object sender, EventArgs e)
        {
            Application.Exit();
        }

    }
}


In een derde partial class poot ik alles op het tabblad 'TabAfstelling': (Sterk ingekort)
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;

namespace YAFT
{
    public partial class TabAfstelling: Form
    {
        private void BerekenStrategy_Click(object sender, EventArgs e)
        {
            FibonacciForm stratObject = new FibonacciForm();
            stratObject.ProgressBar = this.ProgressBar;
            stratObject.numberToCompute = 35;
            stratObject.startAsyncButton_Click(sender, e);
        }

        private void FWS1_KeyUp(object sender, KeyEventArgs e)
        {
            AfstellingObject.AddData(0, 0, FWS1.Text);
        }
    }
}


En hier gaat het fout, ik heb als beginnende C# hobby aap een veel gebruikt voorbeeld gebruikt met het Fibonacci gebeuren om een background worker te stressen.
Werkt prima op het moment dat deze methode staat in de partial class Hoofdscherm : Form, maar als hij (zoals in het voorbeeld) staat in partial class TabAfstelling: Form dan krijg ik de error:
YAFT.TabAfstelling does not contain a definition for 'ProgressBar'

this.ProgressBar is overigens een standaard Control die aangemaakt wordt door VS in de eerste partial class.

Als toch iets in partial class 1 beschikbaar is moet dat toch ook in partial class 2 beschikbaar zijn?

Can`t live without the mods


Acties:
  • 0 Henk 'm!

  • Tepel
  • Registratie: Juni 2006
  • Laatst online: 17-08-2024
Ik gok het erop dat je een partial class niet opeens een andere naam mag geven. Tenminste, als ik je probleem begrepen heb:

Class Hoofdscherm
- Partial 1 : Hoofdscherm.cs
- Partial 2: Hoofdscherm.Designer.cs

Class TabAfstelling
- Partial 1: TabAfstelling.cs

Zo zou de compiler het zien en je kan natuurlijk niet een class hebben met maar 1 partial. Dus, of je geeft alle partials dezelfde naam of je bekijkt je ontwerp nog eens goed. Over het algemeen zijn partial classes niet echt nuttig. Het enige wat ze doen is een class over meerdere files/secties definieren, uiteindelijk wordt er door de compiler 1 grote class van gemaakt.

Mijn advies, als de twee onderdelen dusdanig van elkaar verschillen, maar er dan twee classes van.

0x7F


Acties:
  • 0 Henk 'm!

  • RobIII
  • Registratie: December 2001
  • Niet online

RobIII

Admin Devschuur®

^ Romeinse Ⅲ ja!

(overleden)
De partial class "TabAfstelling" heeft inderdaad een afwijkende naam, zodat de compiler dus niet meer weet waar 'ie bij hoort (er is immers geen tweede partial-class met dezelfde naam). Voor wat leesvoer kun je hier terecht. Daar staan ook meteen de 'voordelen' van partial classes bij (de eerste 3 aandachtspuntjes).

Noot; je kunt het bestand prima "TabAfstelling.cs" noemen, als je (partial) Class naam dus maar "Hoofdscherm" is.

[ Voor 14% gewijzigd door RobIII op 13-11-2007 01:55 ]

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!

  • whoami
  • Registratie: December 2000
  • Laatst online: 01:56
Een partial class is -volgens mij- niet bedoeld voor wat jij het hier wilt gebruiken.
Jij hebt het over partial class 1 en partial class 2; je moet een partial class niet zien als 2 classes, maar als 1 class die over verschillende bestanden gesplitst is.

Als je bepaalde dingen gescheiden wilt hebben; maak je dan niet beter een aparte class ? Bv, een class die een control voorstelt die op je tabblad komt. (Een usercontrol dus).

https://fgheysels.github.io/


Acties:
  • 0 Henk 'm!

  • siepeltjuh
  • Registratie: Maart 2003
  • Niet online
Mischien niet 100% verwoord.

Ik weet dat een partial class eignelijk 1 class is verdeeld over meerdere files. Dat is geen punt, ik doelde meer op gedeelte 1,2 en 3.

File 1 part 1 zit in Hoofdscherm.designer.cs
File 2 part 2 zit in Hoofdscherm.cs
File 3 part 3 zit in TabAfstelling.cs

De reden is dat het zo overzichtelijker is. Elk tab heeft een groot aantal controls, die ik graag per tab in een file gescheiden wil houden. Zo kan ik aan een tab werken, en iemand anders aan een andere tab tegelijkertijd. Andere form schermen komen wel in een aparte class, maar lijkt me duidelijk.

@ Tepel, dat is toch juist de bedoeling van partial classes over meerder files? Met TabAfstelling : Form geeft je toch aan dat TabAfstelling een onderdeel is van de class Form? Dan moet de compiler toch zelf weten waar de rest van de class Form staat?

@ RobIII, je link heb (en had) ik gelezen. Hier kan ik echter niet uit opmaken dat mijn situatie fout is.

EDIT:
Opgelost. Elke partial class moet beginnen met:
public partial class Hoofdscherm : Form
Jullie hadden gelijk. Ik dacht dat elke partial class een andere naam had, totdat ik nog eens triple checkte en zag dat deel 1 en deel 2 een zelfde naam hadden en deel 3 afwijkte. daar kreeg ik ook een probleem mee. Aangepast en opgelost.
Dankjulliewel _/-\o_

[ Voor 23% gewijzigd door siepeltjuh op 13-11-2007 14:22 ]

Can`t live without the mods


Acties:
  • 0 Henk 'm!

  • whoami
  • Registratie: December 2000
  • Laatst online: 01:56
Jullie hadden gelijk. Ik dacht dat elke partial class een andere naam had
Vandaar dat ik dacht dat je niet wist dat een 'partial class' eigenlijk één class is.
Als je 3 delen (partial class) hebt , elk met een verschillende naam, hoe zou je dan willen dat de compiler weet tot welke class die behoren ? :?
TabAfstelling : Form
Misschien moet je eerst eens even een boek lezen over C#, of een tutorial ofzo volgen. Met deze syntax geef je aan dat TabAfstelling overerft van de class Form, met andere worden, dat TabAfstelling een Form is

https://fgheysels.github.io/


Acties:
  • 0 Henk 'm!

  • siepeltjuh
  • Registratie: Maart 2003
  • Niet online
whoami schreef op dinsdag 13 november 2007 @ 14:40:
[...]
Vandaar dat ik dacht dat je niet wist dat een 'partial class' eigenlijk één class is.
Als je 3 delen (partial class) hebt , elk met een verschillende naam, hoe zou je dan willen dat de compiler weet tot welke class die behoren ? :?


[...]
Misschien moet je eerst eens even een boek lezen over C#, of een tutorial ofzo volgen. Met deze syntax geef je aan dat TabAfstelling overerft van de class Form, met andere worden, dat TabAfstelling een Form is
Waarom moet ik dan een boek lezen? Als ik ondanks dat het goed in de boeken staat die ik voor me heb een idiote misser maak, heeft dat ook niet zoveel nut. :(

Ik dact dat de 'main' class Form heet, dat de partial classes met overerving aan elkaar hangen, maar dat slaat nergens. op. Was erg wazig. Namen aanpssen deed de truck.

[ Voor 7% gewijzigd door siepeltjuh op 13-11-2007 20:17 ]

Can`t live without the mods


Acties:
  • 0 Henk 'm!

  • whoami
  • Registratie: December 2000
  • Laatst online: 01:56
siepeltjuh schreef op dinsdag 13 november 2007 @ 20:16:
[...]


Waarom moet ik dan een boek lezen? Als ik ondanks dat het goed in de boeken staat die ik voor me heb een idiote misser maak, heeft dat ook niet zoveel nut. :(
Omdat je de syntax duidelijk nog niet helemaal onder de knie hebt of kunt lezen. En daar hoef je je niet kwaad voor te maken.
Ik dact dat de 'main' class Form heet, dat de partial classes met overerving aan elkaar hangen, maar dat slaat nergens. op. Was erg wazig. Namen aanpssen deed de truck.
Ja, en waarom deed dat de truuk ?

Als je nog niet weet hoe je de naam van een class bepaald, of hoe je definieert dat een class van een andere class moet overerven, dan moet je er even een boek / tutorial / whatever bijnemen.

https://fgheysels.github.io/

Pagina: 1