| 

.NET C# Java Javascript Exception

3
Hi, hier bin ich wieder, mit meinem nächste Problem.
Vielleicht sollte ich doch mal was richtiges lernen?

Ich kann in der Listbox zahlen löschen oder hinzufügen ?
Aber wie kann ich diese Listbox variable gestalten, so, dass auch diese Zahlen mit ausgwählt werden können?

Hier bitte, der bisherige Code:

using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading;
using System.Threading.Tasks;
using System.Windows.Forms;

namespace Testen
{
public partial class Listfeld : Form
{
int x;
Int32[] myArray = new Int32[10] { 101,225,311,41,57,67,711,88,9125,112 };

public Listfeld()
{
InitializeComponent();
}

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

private void Listfeld_Load(object sender, EventArgs e)
{
foreach (Int32 value in myArray)
{
lstAnz1.Items.Add(value);
}

}

private void cmdAnz1_Click(object sender, EventArgs e)
{

}

private void cmdAnz2_Click(object sender, EventArgs e)
{
lstAnz2.Items.Clear();
lblAnz3.Text = "";
for (int i = 0; i < 7; i++)
{
int send = DateTime.Now.Millisecond;
Random randomNumber = new Random(send);
int rndNum = randomNumber.Next(1, 10);
lstAnz2.Items.Add(myArray[rndNum].ToString("#,###"));
lblAnz3.Text += (myArray[rndNum]) + "\n";
Thread.Sleep(250);

}
}

private void cmdHin_Click(object sender, EventArgs e)
{
if (txtHinzu.Text == "")
return;

lstAnz1.Items.Add(txtHinzu.Text);
txtHinzu.Text = "";

}

private void cmdLoesch_Click(object sender, EventArgs e)
{
int x = lstAnz1.SelectedIndex;
if (x != -1)
lstAnz1.Items.RemoveAt(x);
}

}

}
News:
14.01.2014
kannnix 61 6
1
Ich würde ja gerne helfen, verstehe aber deine Frage nicht so ganz. Was meinst du mit "...dass auch diese Zahlen mit ausgwählt werden können"?
luedi 15.01.2014
1
ich glaube er meint die Zufallszahl aus der Listbox. Die Zahlen die er neu hinzufügt stehen ja nicht im Array. Lösung als Antwort :-)
JEwen 15.01.2014
1
@kannix: Es wäre nicht schlecht wenn Du Code mit den zugehörigen Tags einbettest, das macht es besser lesbar. Also [code] Dein QuellCode [/code]
JEwen 15.01.2014
5 Antworten
2
Meinst Du so?

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading;
using System.Threading.Tasks;
using System.Windows.Forms;

namespace Testen
{
public partial class Listfeld : Form
{
//Int32[] myArray = new Int32[10] { 10,2147,91,712,221155,41259,178,36,397,90 };

List<Int32> myArray = new List<Int32>() { 10, 2147, 91, 712, 221155, 41259, 178, 36, 397, 90 };


public Listfeld()
{
InitializeComponent();
}

private void Listfeld_Load(object sender, EventArgs e)
{
foreach (Int32 value in myArray)
{
lstAnz1.Items.Add(value);
}
}

private void cmdAnz2_Click(object sender, EventArgs e)
{
lstAnz2.Items.Clear();
for (int i = 0; i < 3; i++)
{
int seed = DateTime.Now.Millisecond;
Random randomNumber = new Random(seed);
int rndNum = randomNumber.Next(0, myArray.Count - 1);
lstAnz2.Items.Add(myArray[rndNum].ToString("######"));
Thread.Sleep(250);
}
}

private void cmdHinzu_Click(object sender, EventArgs e)
{
try
{
if (string.IsNullOrEmpty(txtHinzu.Text) || !IsNumeric(txtHinzu.Text))
return;
lstAnz1.Items.Add(txtHinzu.Text);
lstAnz1.SelectedIndex = lstAnz1.Items.Count -1;
}
finally
{
txtHinzu.Text = string.Empty;
}
}

private bool IsNumeric(string str)
{
double num;
return double.TryParse(str, out num);
}

private void cmdLoesch_Click(object sender, EventArgs e)
{
if (lstAnz1.SelectedItem == null) return;
int zahl = (int)lstAnz1.SelectedItem;
myArray.Remove(zahl);
lstAnz1.Items.Remove(lstAnz1.SelectedItem);
}

}
}
15.01.2014
JEwen 2,7k 5
Moi! Zunächst vielen Dank für euer Interesse!
Zu luedi:
Die gelöschten Zahlen sollen nicht mehr ausgewählt werden.
Die neu hinzugefügten Zahlen sollen mit ausgewählt werden.
Also wie dies von JEwen erkannt ist.
kannnix 15.01.2014
2
Ok hatte ich es richtig verstanden. Aber habe gerade noch etwas korrigiert in cmdLoesch_Click. Dort wurde die Zahl noch nicht aus der List gelöscht!
JEwen 15.01.2014
Ok! Gelöscht Zahlen werden nicht mehr ausgewählt!
Neu hinzugefügte Zahlen werden nich erkannt (nicht ausgewählt).
kannnix 15.01.2014
1
Du musst das myArray auf jeden Fall austauschen, so wie ich es in meinem Code gezeigt habe. List<Int32> myArray ist richtig. Und in cmdHinzu_Click muss dann die neue Zahl auch dieser List hinzugefügt werden. Schaue Dir bitte nochmals genau meine cmdHinzu_Click Methode an! Die hast Du nicht so übernommen.
JEwen 15.01.2014
2
So ist es richtig! Ich hatte in cmdHin_Click vergessen, dem myArray die neue Zahl hinzuzufügen. Anbei der korrigierte Quelltext
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading;
using System.Threading.Tasks;
using System.Windows.Forms;

namespace Testen
{
public partial class Listfeld : Form
{
// Festlegung der Zahlen, die bei Programmstart in die Listbox geladen werden
// leider gelingt es mir noch nicht dies variabel zu gestalten

List<Int32> myArray = new List<Int32>() { 101,225,311,41,57,67,9,88,9125,112 };

public Listfeld()
{
InitializeComponent();
}

private void cmdEnde_Click(object sender, EventArgs e)
{
// Listfeld wird beendet
Close();
}

private void Listfeld_Load(object sender, EventArgs e)
{
// die im Programm eingegebenen Zahlen werden in die Listbox geladen
foreach (Int32 value in myArray)
{
lstAnz1.Items.Add(value);
}

}

private void cmdAnz1_Click(object sender, EventArgs e)
{

}

private void cmdAnz2_Click(object sender, EventArgs e)
{
// Anzahl der Auswahlzahlen bestimmen
int z = (int)numAnz.Value;

{

// Anzahl der Auswahlzahlen bestimmen
//int z = (int)numAnz.Value;

// Ausgabefelder leeren
lstAnz2.Items.Clear();
lblAnz3.Text = "";
for (int i = 0; i < z; i++)
{
// Zahlen auswählen
int seed = DateTime.Now.Millisecond;
Random randomNumber = new Random(seed);
int rndNum = randomNumber.Next(0, myArray.Count - 1);
lstAnz2.Items.Add(myArray[rndNum].ToString("######"));
lblAnz3.Text += (myArray[rndNum]) + "\n";
Thread.Sleep(250);

}
}

}

private void cmdHin_Click(object sender, EventArgs e)
{
try
{
if (string.IsNullOrEmpty(txtHinzu.Text) || !IsNumeric(txtHinzu.Text))
return;
myArray.Add(txtHinzu.Text);
lstAnz1.Items.Add(txtHinzu.Text);
lstAnz1.SelectedIndex = lstAnz1.Items.Count - 1;
}
finally
{
txtHinzu.Text = string.Empty;
}

}
private bool IsNumeric(string str)
{
double num;
return double.TryParse(str, out num);
}

private void cmdLoesch_Click(object sender, EventArgs e)
{
if (lstAnz1.SelectedItem == null) return;
int zahl = (int)lstAnz1.SelectedItem;
myArray.Remove(zahl);
lstAnz1.Items.Remove(lstAnz1.SelectedItem);
}

private void txtHinzu_TextChanged(object sender, EventArgs e)
{

}

private void lstAnz1_SelectedIndexChanged(object sender, EventArgs e)
{

}

private void lblBox1_Click(object sender, EventArgs e)
{

}

private void lstAnz2_SelectedIndexChanged(object sender, EventArgs e)
{

}

}

}
15.01.2014
JEwen 2,7k 5
1
So läuft.
Ob meine eingefügte Konvertierung bei euch ankommt?

{
int neu; //von mir
neu = Convert.ToInt32(txtHinzu.Text); // von mir

myArray.Add(neu); // Änderung von mir

lstAnz1.Items.Add(neu); // Änderung von mir
lstAnz1.SelectedIndex = lstAnz1.Items.Count - 1;
}


Hier bitte, der komplette Code:
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading;
using System.Threading.Tasks;
using System.Windows.Forms;

namespace Testen
{
public partial class Listfeld : Form
{
// Festlegung der Zahlen, die bei Programmstart in die Listbox geladen werden
// leider gelingt es mir noch nicht dies variabel zu gestalten

List<Int32> myArray = new List<Int32>() {
101,225,311,41,57,67,9,88,9125,112 };

public Listfeld()
{
InitializeComponent();
}

private void cmdEnde_Click(object sender, EventArgs e)
{
// Listfeld wird beendet
Close();
}

private void Listfeld_Load(object sender, EventArgs e)
{
// die im Programm eingegebenen Zahlen werden in die Listbox geladen
foreach (Int32 value in myArray)
{
lstAnz1.Items.Add(value);
}

}

private void cmdAnz1_Click(object sender, EventArgs e)
{

}

private void cmdAnz2_Click(object sender, EventArgs e)
{
// Anzahl der Auswahlzahlen bestimmen
int z = (int)numAnz.Value;

{

// Ausgabefelder leeren
lstAnz2.Items.Clear();
lblAnz3.Text = "";
for (int i = 0; i < z; i++)
{
// Zahlen auswählen
int seed = DateTime.Now.Millisecond;
Random randomNumber = new Random(seed);
int rndNum = randomNumber.Next(0, myArray.Count - 1);
lstAnz2.Items.Add(myArray[rndNum].ToString("######"));
lblAnz3.Text += (myArray[rndNum]) + "\n";
Thread.Sleep(250);

}
}

}

private void cmdHin_Click(object sender, EventArgs e)
{
try
{
if (string.IsNullOrEmpty(txtHinzu.Text) ||
!IsNumeric(txtHinzu.Text))
return;

{
int neu;
neu = Convert.ToInt32(txtHinzu.Text);

myArray.Add(neu);

lstAnz1.Items.Add(neu);
lstAnz1.SelectedIndex = lstAnz1.Items.Count - 1;
}
}
finally
{
txtHinzu.Text = string.Empty;
}

}

private static int NewMethod(int xneu)
{
return Convert.ToInt32(xneu);
}

private bool IsNumeric(string str)
{
double num;
return double.TryParse(str, out num);
}

private void cmdLoesch_Click(object sender, EventArgs e)
{

if (lstAnz1.SelectedItem == null) return;
int zahl = (int)lstAnz1.SelectedItem;
myArray.Remove(zahl);
lstAnz1.Items.Remove(lstAnz1.SelectedItem);

}

private void txtHinzu_TextChanged(object sender, EventArgs e)
{

}

private void lstAnz1_SelectedIndexChanged(object sender, EventArgs e)
{

}

private void lblBox1_Click(object sender, EventArgs e)
{

}

private void lstAnz2_SelectedIndexChanged(object sender, EventArgs e)
{

}

}

}
15.01.2014
kannnix 61 6
0
Ich habe bereits eine Antwort abgeschickt. Kann diese aber nirgends finden.
Wohl Fehler gemacht!
Ein neuer Versuch:

Diese Zeile bekomme ich nicht lauffähig, "Ausdrucksfehler"

" if (string.IsNullOrEmpty(txtHinzu.Text) || !IsNumeric(txtHinzu.Text))
return; "
Habe ich das mit dem Code zeigen nun richtig gemacht?

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading;
using System.Threading.Tasks;
using System.Windows.Forms;

namespace Testen
{
public partial class Listfeld : Form
{
// Festlegung der Zahlen, die bei Programmstart in die Listbox geladen werden
// leider gelingt es mir noch nicht dies variabel zu gestalten

List<Int32> myArray = new List<Int32>() { 101,225,311,41,57,67,9,88,9125,112 };

public Listfeld()
{
InitializeComponent();
}

private void cmdEnde_Click(object sender, EventArgs e)
{
// Listfeld wird beendet
Close();
}

private void Listfeld_Load(object sender, EventArgs e)
{
// die im Programm eingegebenen Zahlen werden in die Listbox geladen
foreach (Int32 value in myArray)
{
lstAnz1.Items.Add(value);
}

}

private void cmdAnz1_Click(object sender, EventArgs e)
{

}

private void cmdAnz2_Click(object sender, EventArgs e)
{
// Anzahl der Auswahlzahlen bestimmen
int z = (int)numAnz.Value;

{

// Anzahl der Auswahlzahlen bestimmen
//int z = (int)numAnz.Value;

// Ausgabefelder leeren
lstAnz2.Items.Clear();
lblAnz3.Text = "";
for (int i = 0; i < z; i++)
{
// Zahlen auswählen
int seed = DateTime.Now.Millisecond;
Random randomNumber = new Random(seed);
int rndNum = randomNumber.Next(0, myArray.Count - 1);
lstAnz2.Items.Add(myArray[rndNum].ToString("######"));
lblAnz3.Text += (myArray[rndNum]) + "\n";
Thread.Sleep(250);

}
}

}

private void cmdHin_Click(object sender, EventArgs e)
{
try
{
//if {string.IsNullOrEmpty(txtHinzu.Text) || //weil bei mir "Ausdruck-Fehler"
//! IsNumeric(txtHinzu.Text))
if (txtHinzu.Text == "")
return;
lstAnz1.Items.Add(txtHinzu.Text);
lstAnz1.SelectedIndex = lstAnz1.Items.Count - 1;
}
finally
{
txtHinzu.Text = string.Empty;
}

}
private bool IsNumeric(string str)
{
double num;
return double.TryParse(str, out num);
}

private void cmdLoesch_Click(object sender, EventArgs e)
{
if (lstAnz1.SelectedItem == null) return;
lstAnz1.Items.Remove(lstAnz1.SelectedItem);
}

private void txtHinzu_TextChanged(object sender, EventArgs e)
{

}

private void lstAnz1_SelectedIndexChanged(object sender, EventArgs e)
{

}

private void lblBox1_Click(object sender, EventArgs e)
{

}

private void lstAnz2_SelectedIndexChanged(object sender, EventArgs e)
{

}

}

}
15.01.2014
kannnix 61 6
1
Im Code hast Du eine geschweifte Klammer { nach dem if statt einer runden Klammer ( , im Text oben wäre es richtig.
Roland Bär 15.01.2014
Danke! Sehr guter Hinweis! Wobei die runde Klammer doch einfacher zu schreiben ist.
kannnix 15.01.2014
0
Die Info hat mir wieder weitergeholfen. Vielen Dank!

Nun hänge ich in dieser Zeile noch fest.
Wahrscheinlich für Könner simpel, aber ich sehe es nicht.

"myArray.Add(txtHinzu.Text);"

Fehler 1 Die beste Übereinstimmung für die überladene 'System.Collections.Generic.List<int>.Add(int)'-Methode hat einige ungültige Argumente.

Fehler 2 Argument '1': Konvertierung von 'string' in 'int' nicht möglich.
15.01.2014
kannnix 61 6
1
Da gibt es doch gar nichts zu "sehen", es steht da doch. Dein Text liegt als String vor und das Array ist vom Typ Integer. Ergo musst Du den Text erst nach Integer konvertieren. Int.TryParse ist Dein Freund. Dann markieren F1 drücken, lesen und lernen.

Alles vorgekaut zu bekommen ohne Hilfetexte zu lesen bringt Dich nicht weiter.
Jens Duczmal 15.01.2014
OK! Auch dieser deutliche Hinweis hat gefruchtet!
kannnix 15.01.2014

Stelle deine .net-Frage jetzt!
TOP TECHNOLOGIES CONSULTING GmbH