[C#, Windows Forms] Variabele in form1 lezen in form2

Pagina: 1
Acties:
  • 383 views sinds 30-01-2008
  • Reageer

  • hwschuur
  • Registratie: April 2003
  • Laatst online: 07-11-2024
Ik probeer een variabele uit form 1 te lezen in form 2.. Dit lukt niet, ook niet als ik de variable in de public class Form1 : System.Windows.Forms.Form declareer.
Moet er een speciale declaratie plaatsvinden, of moet ik deze variabele op een speciale manier in form 2 aanroepen?? :?

  • Michali
  • Registratie: Juli 2002
  • Laatst online: 22-03 18:12
Ik ben niet echt bekend met C# maar in VB.NET zou je gewoon als de variabel public is gedeclareerd hem moeten kunnen bereiken via Form1.Variabel. Het lijkt mij dat dit gewoon hetzelfde is in C#

Noushka's Magnificent Dream | Unity


  • curry684
  • Registratie: Juni 2000
  • Laatst online: 07-05 22:49

curry684

left part of the evil twins

<H1>HIJDOETUTNIE!!!!</H1>
<H3>DANK VOOR DEZE VOLSTREKT HELDERE UITLEG VAN JE PROBLEEM!!!</h3>
En heb je nu ook nog een error msg of wat voorbeeldcode hoe je het aanpakt?

Professionele website nodig?


  • EfBe
  • Registratie: Januari 2000
  • Niet online
curry684 schreef op 28 juni 2003 @ 18:06:
En heb je nu ook nog een error msg [of wat voorbeeldcode hoe je het aanpakt?]
Als je wilt kun je er wel een van mij krijgen hoor, ik ben de beroerste niet. Hier komt ie:

"Unspecified Error Occured".

</melig>

Creator of: LLBLGen Pro | Camera mods for games
Photography portfolio: https://fransbouma.com


  • hwschuur
  • Registratie: April 2003
  • Laatst online: 07-11-2024
Rustig maar, Curry. De error die ik krijg is de volgende:
C#:
1
2
Form2.cs(136): The type or namespace name 'aantal' could not be found 
    (are you missing a using directive or an assembly reference?)

Verrassend hè? Als je nou ook nog mijn eerste post goed gelezen had, dan had je kunnen weten dat er dus geen voorbeeldcode IS. Het gaat om het aanroepen van een variabele. Als je je hier niks bij voor kunt stellen, dan zal ik je hier een voorbeeld geven:
C#:
1
a = a + 1
, waarbij a de variabele uit form1 is die ik in form2 probeer aan te roepen.

[ Voor 6% gewijzigd door curry684 op 28-06-2003 22:12 . Reden: layout ]


  • EfBe
  • Registratie: Januari 2000
  • Niet online
- Variabelen kun je niet aanroepen, methods roep je aan.
- Een form class is net zo goed een class als een andere class
- Een form instance is een object, net zoals een andere instance een object is
- Een object heeft bv properties en wil je vanuit object A de property Foo van object B benaderen, dan zal de instance A een reference naar B moeten hebben.
- Wil je een property Foo van form A benaderen vanuit form B, dan zal B een reference naar A moeten hebben.

Kennelijk heb je die reference niet.

Neem bv in je constructor op:
public Form2 (Form relatedForm)
{
_relatedForm = relatedForm;
}

waarbij '_relatedForm' van het type Form is en je geeft bij instantiatie van Form2 de instance van Form1 mee aan de constructor van Form2, die dus de instance van Form1 zal opslaan in _relatedForm.

Je doet dan in Form2: _relatedForm.Foo = _relatedForm.Foo+1;

En dat haalt dus de property 'Foo' op van de Form1 instance, telt er 1 bij op en roept de setter aan van Foo.

Als je dit soort common knowledge niet kunt combineren krijg je het nog wel zwaar in C# / .NET. Wellicht een goed boek kopen?

Creator of: LLBLGen Pro | Camera mods for games
Photography portfolio: https://fransbouma.com


  • curry684
  • Registratie: Juni 2000
  • Laatst online: 07-05 22:49

curry684

left part of the evil twins

AppleWatcher schreef op 28 June 2003 @ 19:31:
Rustig maar, Curry. De error die ik krijg is de volgende:
C#:
1
2
Form2.cs(136): The type or namespace name 'aantal' could not be found 
    (are you missing a using directive or an assembly reference?)
Maakt het al een stuk duidelijker. Je mist dus de kennis van type 'aantal' in Form2, wat het probleem een stuk anders maakt dan als bijv. Form1 als geheel niet bekend was geweest.
Verrassend hè? Als je nou ook nog mijn eerste post goed gelezen had, dan had je kunnen weten dat er dus geen voorbeeldcode IS. Het gaat om het aanroepen van een variabele. Als je je hier niks bij voor kunt stellen, dan zal ik je hier een voorbeeld geven:
C#:
1
a = a + 1
, waarbij a de variabele uit form1 is die ik in form2 probeer aan te roepen.
Hint: mensen proberen je te helpen hier. Daarvoor hebben ze alle beschikbare informatie nodig. Als je mij wil leren programmeren, succes, maar zonder errormessage en voorbeeldcode moeten wij in onze glazen bol gaan zitten turen wat jouw probleem nou eigenlijk is. En in jouw relevante voorbeeldcode zoeken wij dan of jij references correct hebt gezet zoals Efbe aangeeft en andere fouten, die we helaas niet kunnen vinden omdat jij weigert relevante code te posten.

Dus erg leuk dat je met dat onzinnige regeltje komt, volgende keer gooi ik je topic wel direct dicht als je zo belabberd opent ipv dat ik probeer het probleem te achterhalen. De reden overigens dat ik je nogal 'onvriendelijk' wees op je slechte openingspost zit in je historie van op z'n zachtst gezegd 'minder correcte' topics starten. Verbeter die gewoonte en je hebt geen problemen met mij.

Nuff said overigens, back on-topic.

Professionele website nodig?


  • hwschuur
  • Registratie: April 2003
  • Laatst online: 07-11-2024
Hint: mensen proberen je te helpen hier.
Sorry, maar daar heb ik bij jouw eerste post weinig van gemerkt. Er zijn weinig fora waar het er zo strak aan toe gaat als bij Tweakers.. Het spijt me zeer dat ik niet in 1x met alle benodigde informatie naar voren kwam, ik zal mijn best doen dit in vervolg wel te doen.

EfBe, erg bedankt voor je info, ik zal eens kijken of m'n proggie nu wel werkt B)

  • hwschuur
  • Registratie: April 2003
  • Laatst online: 07-11-2024
Maar, EfBe, als ik dus die relatedForm-code plaats in Public Form2( ); dan krijg ik de volgende error:
C#:
1
Form1.cs(137): No overload for method 'Form2' takes '0' arguments
...

  • gorgi_19
  • Registratie: Mei 2002
  • Laatst online: 23:36

gorgi_19

Kruimeltjes zijn weer op :9

En hoe ziet je constructor er uit?

En doe eens een gokje, met behulp van bovenstaande hint en lees de post van EfBe nog eens goed door!!, wat er fout kan zijn.
EfBe schreef op 28 June 2003 @ 19:20:
Als je wilt kun je er wel een van mij krijgen hoor, ik ben de beroerste niet. Hier komt ie:

"Unspecified Error Occured".

</melig>
* gorgi_19 is nog een leukere tegen gekomen:
"?"

[ Voor 113% gewijzigd door gorgi_19 op 29-06-2003 12:42 ]

Digitaal onderwijsmateriaal, leermateriaal voor hbo


  • curry684
  • Registratie: Juni 2000
  • Laatst online: 07-05 22:49

curry684

left part of the evil twins

AppleWatcher schreef op 29 June 2003 @ 01:48:
[...]
Sorry, maar daar heb ik bij jouw eerste post weinig van gemerkt. Er zijn weinig fora waar het er zo strak aan toe gaat als bij Tweakers.. Het spijt me zeer dat ik niet in 1x met alle benodigde informatie naar voren kwam, ik zal mijn best doen dit in vervolg wel te doen.
Om een hoog niveau vast te houden met 80000 users moet je dat hoge niveau blijven afdwingen. Als je daar problemen mee hebt kun je altijd je vraag nog kwijt op www.beginnersweb.nl hoor.

Professionele website nodig?


  • EfBe
  • Registratie: Januari 2000
  • Niet online
AppleWatcher schreef op 29 June 2003 @ 12:22:
Maar, EfBe, als ik dus die relatedForm-code plaats in Public Form2( ); dan krijg ik de volgende error:
C#:
1
Form1.cs(137): No overload for method 'Form2' takes '0' arguments
...
Ja, je doet:

Form1 fuck1 = new Form1();
Form2 fuck2 = new Form2();

terwijl je moet doen:
Form1 fuck1 = new Form1();
Form2 fuck2 = new Form2(fuck1);

immers, je constructor van Form2 verwacht een parameter.

Mag ik je een tip geven? Koop: Programming C# van Jesse Liberty. erg goed boek en je hebt het zo onder de knie. Je mist essentiele basisinfo waardoor je wellicht dit wel goed krijgt na wat vragen maar binnen 10 minuten met de volgende vraag opgescheept zit. En boeken lezen over iets nieuws is geen schande, dat doen we allemaal. Geen een hier krijgt de kennis geimplanteerd, we moeten die allemaal opslurpen ergens uit, boeken, tutorials, google, hier.

[ Voor 13% gewijzigd door EfBe op 29-06-2003 13:10 ]

Creator of: LLBLGen Pro | Camera mods for games
Photography portfolio: https://fransbouma.com


  • hwschuur
  • Registratie: April 2003
  • Laatst online: 07-11-2024
k, thx ;)

ehm, volgens mij mag je geen waarden meegeven bij het creëren van een nieuwe form.. Check deze error bij

Form2 frm = new Form2(aantal);:

C#:
1
Form1.cs(138): No overload for method 'Form2' takes '1' arguments
. :'(

(Form1 meegeven kan dus ook niet)

[ Voor 107% gewijzigd door hwschuur op 29-06-2003 15:03 ]


  • EfBe
  • Registratie: Januari 2000
  • Niet online
waarom post je dan die constructor code van form2 niet? Wat is er zo geheim aan dat stukje code?

Beetje zinloze thread aan het worden zo.

Creator of: LLBLGen Pro | Camera mods for games
Photography portfolio: https://fransbouma.com


Verwijderd

Dan moet je de constructor van form2 veranderen, da's een functie die dezelfde naam heeft als de klasse. Als ik het zo lees dan moet je toch echt eerst wat basiskennis c# opdoen want met deze kennis blijf je tegen problemen aanlopen.

  • hwschuur
  • Registratie: April 2003
  • Laatst online: 07-11-2024
C#:
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
27
28
29
    public class Form2 : System.Windows.Forms.Form
    {
        private System.Windows.Forms.Label label1;
        private System.Windows.Forms.TextBox textBox1;
        private System.Windows.Forms.TextBox textBox2;
        private System.Windows.Forms.Label label2;
        private System.Windows.Forms.Label label3;
        private System.Windows.Forms.TextBox textBox3;
        private System.Windows.Forms.Button button1;
                    public int aantal;
        
        /// <summary>
        /// Required designer variable.
        /// </summary>
        private System.ComponentModel.Container components = null;
        

        public Form2()
        {
            //
            // Required for Windows Form Designer support
            //
    
            InitializeComponent();

            //
            // TODO: Add any constructor code after InitializeComponent call
            //
        }


voila...

en het gebied rond 138:

C#:
1
2
3
4
                Form1.ActiveForm.Visible = false;
                Form2 frm = new Form2();
                frm.Show();
            }

[ Voor 10% gewijzigd door hwschuur op 29-06-2003 18:17 ]


  • Soultaker
  • Registratie: September 2000
  • Laatst online: 02-05 01:32
Ik zou zeggen dat met het .NET platform waarbij alle componenten zelfbeschrijvend zijn, het makkelijker dan ooit zou moeten zijn om aan te geven wat de typen van de betrokken objecten zijn, welke attributen en methoden ze hebben, en welke typen die hebben. Met een fatsoenlijke debugger (Visual Studio .NET bijvoorbeeld) zou je dan ook probleemloos moeten kunnen aangeven waar de fout nu precies zit.

Beetje jammer dat de meeste mensen wel kunnen "programmeren" voor .NET maar nog nooit van debuggen hebben gehoord. Misschien is dit een idee voor een tutorial?

  • Soultaker
  • Registratie: September 2000
  • Laatst online: 02-05 01:32
Kijk, daar kunnen we wat mee. Nu nog Form2.cs en dan vooral het gebied om regel 136 graag?

  • hwschuur
  • Registratie: April 2003
  • Laatst online: 07-11-2024
oepssssss volgens mij heb ik het al...
Bij het aanroepen van form2 in form1 doe je
C#:
1
Form2 frm = new Form2(aantal);
waarbij aantal de variabele is, en bij form2 init doe je
C#:
1
    public Form2(int aantal)
. Het ís wel logisch :Y)

----------

nu nog 1 probleem.. de variabele is nu wel bij public Form2(int aantal) bekend, maar niet bij alle klassen binnen die form.. Simpelweg 'int aantal' in de ( ) van de klassen zetten werkt niet (variabele is immers niet bekend):

C#:
1
2
3
Form2.cs(185): The type or namespace name 'aantal' 
could not be found (are you missing a using directive or 
an assembly reference?)


edit: ook alweer opgelost.. Variabele aantal in public Form2(int aantal) ff gedeclareerd naar een nieuwe int, die via 'public int variabele' in public class Form2 : System.Windows.Forms.Form in heel Form2 bekend is.

Bedankt voor uw hulp allen! O-)

[ Voor 131% gewijzigd door hwschuur op 29-06-2003 18:33 ]


  • whoami
  • Registratie: December 2000
  • Laatst online: 01:02
Eigenlijk vind ik dit een veel mooiere/betere manier om variabelen uit een andere form uit te lezen.

https://fgheysels.github.io/

Pagina: 1