Autor Beitrag
Fauk
Hält's aus hier
Beiträge: 4



BeitragVerfasst: Mi 15.05.13 10:45 
Hallo werte Community,

Ich bin noch ganz neu was C# angeht und bisher verwirren mich die Arrays noch ein wenig. Ich benutze Visual Studio 2012 und möchte ein einfaches Winforms Program schreiben. In diesem Programm gibt es ein Label, bisher zur Ausgabe, und 9 Buttons die jeweils den Wert von 0 - 9, also wie ein Numpad, betragen. Der Benutzer soll jetzt einfach nur auf die Buttons klicken können und damit eine Zahl zusammen setzen. Klickt er bspw. auf den Button 1 und dann auf die Buttons 2 und 4 soll im Label die Zahl 124 Erscheinen.

Da ich wie gesagt noch Anfänger bin wollte ich das ganze mit Arrays realisieren. Wobei wir aber schon bei meinem ersten Problem sind. Da ich nicht weiß wieviele Zahlen der Benutzer letztendlich eintippt benötige ich ein Array mit einer unbekannten Größe. Wie kann ich das in C# realisieren? Ursprünglich wollte ich in der Deklaration wie z.B:

ausblenden C#-Quelltext
1:
int[] Eingabe = new int[10];					

Die "10" durch eine Variable ersetzen, die sich mit jeder Eingabe erhöht. Allerdings funktioniert das soweit ja nicht, da zumindest Visual Studio es nicht erlaubt ein Array mit einer Variable als Größe zu definieren. Deshalb meine Frage jetzt, was ich tun muss damit ich ein Array deklarieren kann das vom Typ Int ist und eine beliebige Größe hat.

Meine nächste Frage wäre dann noch falls der Benutzer nun 3 Eingaben gemacht hat, bspw. die "1", "4" sowie die "8", wie füge ich diese in einer Variable zusammen? So das dann letztendlich die 3 Array Werte zu einer neuen Variable mit dem Wert 148 zusammengeführt werden?

Moderiert von user profile iconChristian S.: C#-Tags hinzugefügt
Christian S.
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 20451
Erhaltene Danke: 2264

Win 10
C# (VS 2019)
BeitragVerfasst: Mi 15.05.13 10:58 
Hallo und :welcome:!

Statt eines Arrays würde ich hier eine List<int> verwenden, die ist genau dazu gemacht :-)

ausblenden C#-Quelltext
1:
2:
3:
4:
5:
var eingabe = new List<int>();

eingabe.Add(5);
eingabe.Add(7);
// ... etc ...



Für die zweite Frage erstelle bitte einen neuen Thread, damit das hier nicht durcheinander geht. Danke Dir! :zustimm:

Viele Grüße
Christian

_________________
Zwei Worte werden Dir im Leben viele Türen öffnen - "ziehen" und "drücken".

Für diesen Beitrag haben gedankt: Fauk
Fauk Threadstarter
Hält's aus hier
Beiträge: 4



BeitragVerfasst: Mi 15.05.13 11:28 
Hallo und danke für die schnelle Antwort :)

Wenn ich das jetzt richtig verstanden habe, erstellt das ganze eine Liste mit beliebig vielen Werten und der Code:

eingabe.Add(5);

fügt der Liste bspw. eine 5 hinzu? Falls ja wie kann ich die Liste dann auslesen bzw. das Ergebnis in ein Label schreiben?
Christian S.
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 20451
Erhaltene Danke: 2264

Win 10
C# (VS 2019)
BeitragVerfasst: Mi 15.05.13 12:08 
Das hast Du richtig verstanden :-)

Du kannst auf die Liste zugreifen wie auf ein Array, also eingabe[0] liefert Dir das erste Element der Liste, eingabe[1] das Zweite und so weiter.

Alle Elemente in einer Schleife auslesen und auf der Konsole ausgeben wäre dann z.B.
ausblenden C#-Quelltext
1:
2:
for(int i = 0; i < eingabe.Count; i++)
    Console.WriteLine(eingabe[i]);

_________________
Zwei Worte werden Dir im Leben viele Türen öffnen - "ziehen" und "drücken".
Fauk Threadstarter
Hält's aus hier
Beiträge: 4



BeitragVerfasst: Mi 15.05.13 12:50 
Nochmal Danke Christian,

Das ganze funktioniert soweit auch. Mit der Ausnahme das ich das ganze nicht in einer Konsole sondern in einem Label ausgeben will. Ich stehe aber momentan irgendwie vor dem Problem das wenn ich List.Count eingebe er mir die richtige Anzahl an Werten anzeigt. Also bspw. 11 Listenwerte. Wenn ich die Forschleife jetzt aber anwende gibt er mir immer nur die letzte Eingabe aus, woran kann das liegen?

bisheriger Code:

ausblenden volle Höhe 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:
63:
64:
65:
66:
67:
68:
69:
70:
71:
72:
73:
74:
75:
76:
77:
78:
79:
80:
81:
82:
83:
84:
85:
86:
87:
88:
89:
90:
91:
92:
93:
94:
95:
96:
97:
98:
99:
100:
101:
102:
103:
104:
105:
106:
107:
108:
109:
110:
111:
112:
113:
114:
115:
116:
117:
118:
119:
120:
121:
122:
123:
124:
125:
126:
127:
128:
129:
130:
131:
132:
133:
134:
135:
136:
137:
138:
139:
140:
141:
142:
143:
144:
145:
146:
147:
148:
149:
150:
151:
152:
153:
154:
155:
156:
157:
158:
159:
160:
161:
162:
163:
164:
165:
166:
167:
168:
169:
170:
171:
172:
173:
174:
175:
176:
177:
178:
179:
180:
181:
182:
183:
184:
185:
186:
187:
188:
189:
190:
191:
192:
193:
194:
195:
196:
197:
198:
199:
200:
201:
202:
203:
204:
205:
206:
207:
208:
209:
210:
211:
212:
213:
214:
215:
216:
217:
218:
219:
220:
221:
222:
223:
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 Bildschirmtastatur
{
    public partial class Form1 : Form
    {
        int unten;
        List<int> Eingabe = new List<int>();

        public Form1()
        {
            InitializeComponent();
        }

        private void cmd0_Click(object sender, EventArgs e)
        {
            if (unten == 1)
            {
                Eingabe.Add(0);
                for (int i = 0; i < Eingabe.Count; i++)
                lblunten.Text = "Listenwert:" + Eingabe[i]; 
            }
            else
            {
                Eingabe.Add(0);
                for (int i = 0; i < Eingabe.Count; i++)
                lbloben.Text = "Listenwert:" + Eingabe[i];
            }
        }

        private void cmd1_Click(object sender, EventArgs e)
        {
            if (unten == 1)
            {
                Eingabe.Add(1);
                for (int i = 0; i < Eingabe.Count; i++)
                lblunten.Text = "Listenwert:" + Eingabe[i];
            }
            else
            {
                Eingabe.Add(1);
                for (int i = 0; i < Eingabe.Count; i++)
                lbloben.Text = "Listenwert:" + Eingabe[i];
            }
        }

        private void cmd2_Click(object sender, EventArgs e)
        {
            if (unten == 1)
            {
                Eingabe.Add(2);
                for (int i = 0; i < Eingabe.Count; i++)
                lblunten.Text = "Listenwert:" + Eingabe[i];
            }
            else
            {
                Eingabe.Add(2);
                for (int i = 0; i < Eingabe.Count; i++)
                lbloben.Text = "Listenwert:" + Eingabe[i];
            }
        }

        private void cmd3_Click(object sender, EventArgs e)
        {
            if (unten == 1)
            {
                Eingabe.Add(3);
                for (int i = 0; i < Eingabe.Count; i++)
                lblunten.Text = "Listenwert:" + Eingabe[i];
            }
            else
            {
                Eingabe.Add(3);
                for (int i = 0; i < Eingabe.Count; i++)
                lbloben.Text = "Listenwert:" + Eingabe[i];
            }
        }

        private void cmd4_Click(object sender, EventArgs e)
        {
            if (unten == 1)
            {
                Eingabe.Add(4);
                for (int i = 0; i < Eingabe.Count; i++)
                lblunten.Text = "Listenwert:" + Eingabe[i];
            }
            else
            {
                Eingabe.Add(4);
                for (int i = 0; i < Eingabe.Count; i++)
                lbloben.Text = "Listenwert:" + Eingabe[i];
            }
        }

        private void cmd5_Click(object sender, EventArgs e)
        {
            if (unten == 1)
            {
                Eingabe.Add(5);
                for (int i = 0; i < Eingabe.Count; i++)
                lblunten.Text = "Listenwert:" + Eingabe[i];
            }
            else
            {
                Eingabe.Add(5);
                for (int i = 0; i < Eingabe.Count; i++)
                lbloben.Text = "Listenwert:" + Eingabe[i];
            }
        }

        private void cmd6_Click(object sender, EventArgs e)
        {
            if (unten == 1)
            {
                Eingabe.Add(6);
                for (int i = 0; i < Eingabe.Count; i++)
                lblunten.Text = "Listenwert:" + Eingabe[i];
            }
            else
            {
                Eingabe.Add(6);
                for (int i = 0; i < Eingabe.Count; i++)
                lbloben.Text = "Listenwert:" + Eingabe[i];
            }
        }

        private void cmd7_Click(object sender, EventArgs e)
        {
            if (unten == 1)
            {
                Eingabe.Add(7);
                for (int i = 0; i < Eingabe.Count; i++)
                lblunten.Text = "Listenwert:" + Eingabe[i];
            }
            else
            {
                Eingabe.Add(7);
                for (int i = 0; i < Eingabe.Count; i++)
                lbloben.Text = "Listenwert:" + Eingabe[i];
            }
        }

        private void cmd8_Click(object sender, EventArgs e)
        {
            if (unten == 1)
            {
                Eingabe.Add(8);
                for (int i = 0; i < Eingabe.Count; i++)
                lblunten.Text = "Listenwert:" + Eingabe[i];
            }
            else
            {
                Eingabe.Add(8);
                for (int i = 0; i < Eingabe.Count; i++)
                lbloben.Text = "Listenwert:" + Eingabe[i];
            }
        }

        private void cmd9_Click(object sender, EventArgs e)
        {
            if (unten == 1)
            {
                Eingabe.Add(9);
                for (int i = 0; i < Eingabe.Count; i++)
                lblunten.Text = "Listenwert:" + Eingabe[i];
            }
            else
            {
                Eingabe.Add(9);
                for (int i = 0; i < Eingabe.Count; i++)
                lbloben.Text = "Listenwert:" + Eingabe[i];
            }
        }

        private void lbloben_Click(object sender, EventArgs e)
        {
            unten = 0;
            cmd0.Visible = true;
            cmd1.Visible = true;
            cmd2.Visible = true;
            cmd3.Visible = true;
            cmd4.Visible = true;
            cmd5.Visible = true;
            cmd6.Visible = true;
            cmd7.Visible = true;
            cmd8.Visible = true;
            cmd9.Visible = true;
        }

        private void lblunten_Click(object sender, EventArgs e)
        {
            unten = 1;
            cmd0.Visible = true;
            cmd1.Visible = true;
            cmd2.Visible = true;
            cmd3.Visible = true;
            cmd4.Visible = true;
            cmd5.Visible = true;
            cmd6.Visible = true;
            cmd7.Visible = true;
            cmd8.Visible = true;
            cmd9.Visible = true;
        }

        private void cmdende_Click(object sender, EventArgs e)
        {
            Close();
        }

        private void lblanzeigen_Click(object sender, EventArgs e)
        {

        }
    }
}
Ralf Jansen
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 4708
Erhaltene Danke: 991


VS2010 Pro, VS2012 Pro, VS2013 Pro, VS2015 Pro, Delphi 7 Pro
BeitragVerfasst: Mi 15.05.13 12:54 
Weil du dem Label.Text immer wieder einen neuen Text zuweist. Bei deinen 11 Elementen überschreibst du den Inhalt also 10 mal und siehst nur den letzten zugewiesenen.
Wenn du den Label Text ergänzen anstatt überschreiben willst nimm ein += anstatt nur =.

ausblenden C#-Quelltext
1:
label.Text += "meinLieberErgänzenderText"// Text anhängen anstatt ersetzen					
Th69
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Moderator
Beiträge: 4798
Erhaltene Danke: 1059

Win10
C#, C++ (VS 2017/19/22)
BeitragVerfasst: Mi 15.05.13 13:13 
Hallo Fuak,

und um Codeduplizierung zu vermeiden, solltest du diesen Code in eine eigene Methode auslagern:
ausblenden C#-Quelltext
1:
2:
3:
4:
5:
void UpdateText()
{
    lbloben.Text = "Listenwert:";
    for (int i = 0; i < Eingabe.Count; i++)
         lbloben.Text += Eingabe[i];


Auch wenn der Code mit der Liste ein gutes Programmierexampel ist, wäre in diesem konkreten Fall wohl ein string als Datenspeicher besser (da dieser ebenfalls +=, Index-Operator sowie direkte Ausgabe unterstützt).
Fauk Threadstarter
Hält's aus hier
Beiträge: 4



BeitragVerfasst: Mi 15.05.13 13:41 
Danke Ralf, hat mit einer kleinen Änderung wunderbar funktioniert :)

@Th69 Das werde ich machen, sobald das Program einmal das gemacht hat was ich von ihm will :) Aber der Tipp behalte ich mir definitiv im Hinterkopf allein schon um das ganze zu entschlacken.