Entwickler-Ecke

Basistechnologien - Button klick +1


DeStein - Sa 16.11.13 18:59
Titel: Button klick +1
Hallo
Ich habe ein Problem und zwar dass ich ein button habe der eigentlich bei jedem klick dem label +1 hinzufügt aber es geht nur einmal.
Hier mein code:

C#-Quelltext
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:
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;

namespace WindowsFormsApplication4
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

          private void button1_Click_1(object sender, EventArgs e)
        {
            int Zähler = 0;
            int ergebnis = 0;
            Zähler = 0;
            ergebnis = Zähler + 1;
            label1.Text = ergebnis.ToString();       
        }
    }


Moderiert von user profile iconChristian S.: C#-Tags hinzugefügt
Moderiert von user profile iconChristian S.: Topic aus WinForms verschoben am Sa 16.11.2013 um 19:25


Christian S. - Sa 16.11.13 19:24

Hallo und :welcome:!

Du hast Zähler als lokale Variable der Methode deklariert und füllst sie bei jedem Mal neu mit dem Wert 0. Und danach addierst Du 1. Du rechnest also jedes Mal 0 + 1, das ergibt natürlich immer 1.

Du musst die Zählervariable als Feld der Form-Klasse deklarieren und den Anfangswert 0 nur einmal (am Besten direkt bei der Deklaration) zuweisen. In der Klick-Methode erhöhst Du den Wert dieses Feldes dann immer um 1 und gibst es aus. Die Variable ergebnis brauchst Du dann nicht mehr.

Viele Grüße
Christian


DeStein - Sa 16.11.13 19:59

Danke schon mal für die Antwort
aber ich programmiere jetzt erst seit zwei Wochen und wollte fragen wie man das macht


Christian S. - Sa 16.11.13 23:01

Hallo!

Also, als Feld bezeichnet man eine Variable, die nicht zu einer speziellen Methode gehört, sondern zur Instanz einer Klasse. Wenn ich also eine Klasse habe, die so aussieht:


C#-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
public partial class Form1 : Form {
  private int feld = 42//direkt mit dem Wert 42 initialisiert

  public void ErhöheUmEins()
  {
    feld += 1;
  }

  public void GebeAus()
  {
    label1.Text = feld.ToString();
  }
}


Dann sieht man schon, dass feld nicht in einer der Methoden deklariert ist, sondern zur gesamten Klasse gehört. Beide Methoden greifen auf dieses Feld zu, was die eine Methode mit dem Feld macht, "sieht" auch die andere Methode.

Grüße
Christian


DeStein - So 17.11.13 03:50

Bei mir funktioniert des nicht
ich hab des eingefügt und wenn ich des starte und auf den button klicke passiert nichts


Christian S. - So 17.11.13 10:12

Nur mit Einfügen geht das auch nicht. Du musst schon noch verstehen, was ich geschrieben habe und dann anwenden. Wenn Du Fragen zum Verständnis hast, kannst Du gerne hier fragen, aber einen fertigen Quelltext, den Du ohne Eigenleistung übernehmen kannst, bekommst Du von mir nicht.


Th69 - So 17.11.13 10:12

Hallo,

der Code von Christian ist ja nur ein Beispiel. Für deinen Code hat Christian dir ja schon geschrieben, daß du die Variable 'Zähler' innerhalb der Klasse hinschreiben mußt und daß du dann diese Variable erhöhen mußt (und nicht die Variable 'ergebnis').
Wenn du damit immer noch nicht klarkommst, dann poste nochmal deinen geänderten Code.

Edit: Guten Morgen Christian - wußte nicht, daß du gleichzeitig postest ;-)


DeStein - So 17.11.13 17:46

Ich habe es mal ein bisschen versucht und jetzt steht immer eine 1 dran

C#-Quelltext
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:
namespace WindowsFormsApplication7
{
    public partial class Form1 : Form
    {

        public Form1()
        {
            InitializeComponent();
        }

        private void button1_Click(object sender, EventArgs e)
        {          
            label1.Text = Zähler.ToString();  
        }

        private int Zähler = 1;
        public void ErhöheUmEins()
        {
            Zähler += 1;
        }
        public void GebeAus()
        {
            label1.Text = Zähler.ToString();
        }
    }
}


Moderiert von user profile iconChristian S.: C#-Tags hinzugefügt


Marc. - So 17.11.13 18:01

user profile iconDeStein hat folgendes geschrieben Zum zitierten Posting springen:
Ich habe es mal ein bisschen versucht und jetzt steht immer eine 1 dran
Wundert dich das?

C#-Quelltext
1:
2:
3:
4:
    private void button1_Click(object sender, EventArgs e)
        {          
            label1.Text = Zähler.ToString();  
        }

Du hast zwei Methoden:

C#-Quelltext
1:
2:
public void GebeAus()
public void ErhöheUmEins()

Vielleicht liegt es nahe, diese auch aufzurufen. :idea: ;)


DeStein - So 17.11.13 22:09

Des Funktioniert jetzt bei mir und ich hab noch dazu gemacht das wenn ich meinen 2. button klicke es 1 vom ersten abzieht wie kann man machen dass das erste nicht unter null geht
Hier mein Code:

C#-Quelltext
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:
30:
31:
32:
33:
34:
35:
36:
37:
38:
39:
40:
41:
42:
43:
44:
namespace WindowsFormsApplication8
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        private void button1_Click(object sender, EventArgs e)
        {
            ErhöheUmEins();
            GebeAus();
        }
        private int Zähler = 1;
        public void ErhöheUmEins()
        {
            Zähler += 1;
        }
        public void GebeAus()
        {

            label1.Text = Zähler.ToString();
        }

        private void button2_Click(object sender, EventArgs e)
        {
            ErhöheUmEins2();
            GebeAus2();
        }
        private int Zähler2 = 1;
        public void ErhöheUmEins2()
        {
            Zähler2 += 4;
            Zähler -= 1;
        }
        public void GebeAus2()
        {

            label2.Text = Zähler2.ToString();
            label1.Text = Zähler.ToString();
        }
    }
}


Th69 - Mo 18.11.13 13:37

Hallo,

die if-Anweisung solltest du aber schon kennen. Um die Grundlagen von C# selbst zu lernen, ist es besser, erst einmal einfache Konsolenanwendungen zu erstellen - solange bis du alle (bzw. die meisten) C#-Schlüsselwörter kennst; erst dann solltest du zur GUI-Programmierung wechseln.


DeStein - Mo 18.11.13 18:17

Ich habe es mit if versucht aber weiß nicht wie ich das machen soll das es wenn es richtig ist etwas macht und wenn nicht dann nicht

C#-Quelltext
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:
30:
31:
32:
33:
34:
35:
36:
37:
38:
39:
40:
41:
42:
43:
44:
45:
46:
47:
48:
49:
50:
51:
52:
53:
54:
55:
56:
57:
58:
59:
60:
61:
namespace WindowsFormsApplication8
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        private void button1_Click(object sender, EventArgs e)
        {
            ErhöheUmEins();
            GebeAus();
        }
        private int Zähler = 0;
        
        
        public void ErhöheUmEins()
        {
            Zähler += 1;
        }
        public void GebeAus()
        {

            label1.Text = Zähler.ToString();
        }

        private void button2_Click(object sender, EventArgs e)
        {
            ErhöheUmEins2();
            GebeAus2();
        }
        private int Zähler2 = 1;

        public void ErhöheUmEins2()
        {
            Zähler2 += 4;
            Zähler -= 1;
        }
        public void GebeAus2()
        {

            label2.Text = Zähler2.ToString();
            label1.Text = Zähler.ToString();
        }
        private void Ende()
        {
            bool bedingung = Zähler > 0;

            if (bedingung == true)
            {
        
            }

            if (bedingung == false)
            {

            }
        }
    }
}


papa69 - Mo 18.11.13 20:40

deine "Ende()-Methode" kann so nicht funktionieren...

mittels if prüfst du schon automatisch, ob etwas wahr ist (oder eben nicht)

siehe hier http://openbook.galileocomputing.de/csharp/kap12.htm#Xxx958418

und/oder hier http://msdn.microsoft.com/de-de/library/676s4xab.aspx

also machst du


C#-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
if (bedingung < 0 )
{
   tuDies();
}
else if (bedingung == 0 )
{
    tuWasAnderes();
}
else        //wenn bedingung NICHT größer 0 UND AUCH NICHT genau 0 ist
{
    tuEsNicht();
}


good luck :)


DeStein - Mi 20.11.13 14:59

Ich habe das mit if jetzt geschafft und wollte fragen wie man die schritte die der zähler hoch geht mit einem button ändern kannund wie man int zu string machen kann

C#-Quelltext
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:
30:
31:
32:
33:
34:
35:
36:
37:
38:
39:
40:
41:
42:
43:
44:
45:
46:
47:
48:
49:
50:
51:
52:
53:
54:
55:
56:
57:
58:
59:
60:
61:
62:
namespace WindowsFormsApplication8
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        private void button1_Click(object sender, EventArgs e)
        {
            ErhöheUmEins();
            GebeAus();
        }
        private int Zähler = 0;
        
        
        public void ErhöheUmEins()
        {
            Zähler += 1;
        }
        public void GebeAus()
        {

            label1.Text = Zähler.ToString();
        }

        private void button2_Click(object sender, EventArgs e)
        {
             if (Zähler > 0)
    {
        ErhöheUmEins2();
    }
            GebeAus2();
        }
        private int Zähler2 = 1;

        public void ErhöheUmEins2()
        {
            Zähler2 += 4;
            Zähler -= 1;
        }
        public void GebeAus2()
        {

            label2.Text = Zähler2.ToString();
            label1.Text = Zähler.ToString();
        }

        

        public void button3_Click(object sender, EventArgs e)
        {
            if (label2.Text = 100)
            {

            }
        }
    
    
        }
    }


Th69 - Mi 20.11.13 15:36

Hallo DeStein,

ich schließe mal dieses Thema, da die eigentliche Frage ja beantwortet wurde.
Deine beiden anderen Fragen lassen sich mit jedem Grundlagenbuch (wie das schon erwähnte OpenBook über C#) oder aber durch Suche im Forum (bzw. Internet) lösen.