[C#] Eigenschap met MessageBox

Status
Niet open voor verdere reacties.

jimowns

Gebruiker
Lid geworden
2 sep 2006
Berichten
341
Ik heb eigenlijk 1 pracktische vraag en 1 theoretisch vraagje.

1) Ik wil eigenlijk in een eigenschap een controle laten uitvoeren, zodat ik op de button druk dat er op komt in een messagebox dat ik maar "1x" op de knop gedrukt heb en als ik nog eens erop druk dat er "2x op knop gedrukt" tevoorschijn komt.

Ik krijg wel een MessageBox berichtje maar het telt niet op.

2) Een eigenschap dient dat alleen maar voor controle uit te voeren ? Want ik heb het boek Visual C# 2008 - de Basis maar het staat er allemaal niet echt duidelijk in.

Code:
        //  Een eigenschap is voor controle uit te voeren: 
        public string Controle = (0).ToString();
        public string Controle01
        {
            set
            {
                int Contr = Int32.Parse( Controle );  // Omzetten van string naar integer 32 bits
                for (Contr = 0; Contr < 10; Contr++)
                {
                    MessageBox.Show(Contr.ToString());
                }
            }
            get
            {
                return Controle;
            }
        }

        private void button1_Click(object sender, EventArgs e)
        {
            MessageBox.Show("Je hebt: " + Controle01 + " keer gedrukt op de knop");
        }


Mvg, Jim ;)
 
Je schijnt een aantal dingen nog niet helemaal te begrijpen, maar dat is niet erg, daar is dit forum voor.

1. Een string is niet het data type dat je zoekt voor het bijhouden van het aantal keer dat er geklikt is. Gebruik dan bijvoorbeeld een int, dan hoef je ook geen cast te doen.
(al heeft de cast in je voorbeeld (int32.parse(Controle)) geen nut, daar je in de loop die vervolgens volgt de variabele toch op 0 instelt ;))

2. In je voorbeeld heb je helemaal geen property/getter/setter nodig, daar button1_Click gewoon onderdeel is van de klasse zelf, en dus direct toegang heeft tot de variabele 'Controle'.

3. Een "property" is gewoon wat syntax sugar voor een getter/setter.

[cpp]
public int X
{
set { x = value; }
get { return x; }
}
// ...
obj.X = 10;
int i = 1 + obj.X;
[/cpp]

is gelijk aan:

[cpp]
public void setX(int value) { x = value; }
public int getX() { return x; }
// ...
obj.setX(10);
int i = 1 + obj.getX();
[/cpp]

En om hetgeen je vraagt te bereiken hoef je alleen maar het volgende te doen:

[cpp]
private int aantalKeerGeklikt;

private void button1_Click(object sender, EventArgs e)
{
MessageBox.Show(string.Format("Je hebt {0} keer geklikt...", ++aantalKeerGeklikt));
}
[/cpp]
 
Danku CoD_NL :D
Maar dat object orienterend programmeren lukt me niet echt goed.
Ik heb het geprobeert met een integer en dat lukt niet, dus dacht ik ik doe het eens in een string.
Ik probeer zowat te experimenteren zodanig ik een beter overzicht heb over eigenschappen, maar ik maak er een klein knoeiboeitje van.

Hier en daar doe ik soms wel stomme foutjes :p.
Maar Eigenschappen dat vind ik toch een lastig stukje.
1) Maar de get { } dient dit alleen maar voor de waarde terug te geven aan het veld?
2) En de set { } is voor de waarde van het veld te veranderen.
Maar kun je in de set { } een iteratie- , controle structuren toevoegen ?


Mvg, Jim ;)
 
Iemand die de bovenstaande vraag erop kan responderen ? :p
 
Ik weet het zelf niet, maar door dat simpelweg even te testen weet jij het wel toch?
 
Dit heb ik getest en het lukte niet.
Mss omdat ik iets verkeerd heb gedaan, maar dat betwijfel ik.
 
Mss omdat ik iets verkeerd heb gedaan, maar dat betwijfel ik.

Dat betwijfel ik. Het zijn gewoon twee aparte functies waarvoor geen extra beperkingen geldt. Het plaatsen van een controle/lus is dus geen probleem.

Ik heb nu niet echt veel tijd en moet dadelijk weg, maar zal het morgen wel beter uitleggen.
 
Ik weet het al ongeveer.
Bij 'property's' in de set{} wordt alleen de waarde achterhaald.
In de get {} wordt de waarde terug gegeven, Maar dit kun je ook doen met behulp van een iteratie te additieven.

Als dit klopt is alles van Property's opgelost ;)

Mvg, Jim
 
Laatst bewerkt:
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan