C# Text zur Listbox hinzufügen

Faizy

Commander
Registriert
Jan. 2011
Beiträge
2.842
Hey,

ich habe gerade ein kleines Problem und wahrscheinlich ist die Lösung auch total einfach, aber ich komme nicht drauf :freak:

Also, habe ein Array(int), gefüllt mit Zahlen, welche über eine for-Schleife ausgegeben und anschließend in einer Listbox erscheinen. Ich würde nun gerne in diese Zeile, in welcher ein bestimmter Wert ausgegeben wird, noch einen Text hinzufügen.

Beispiel, meine Ausgabe sieht aktuell so aus:


Ich würde gerne folgende Ausgabe haben(Beispiel):

1 Test
2 Test1
3 Test2

Habt ihr einen Lösungsvorschlag? Das Problem liegt eig. darin, dass ich den Text nicht in dieselbe Zeile bekomme, wie die Zahlen.

Danke :)
 
Benutz ItemsSource zum binden der Daten und setz dann einen Converter für Int mit String als Rückgabe :)
 
@Mike Lowrey: Ich glaube das etwas zu viel/früh für den "vermuteten" Stand des TE.
#Edit: @Mike: Ja es ist eine Lösung ^^, wobei er sich den Converter wohl selbst schreiben müsste, da er ja noch das int mit dem string verknüpfen möchte.

Wenn es nicht von Bedeutung ist, dass in der ListBox ein int steht, kannst du einfach das int mit gewünschtem Text in ein string bringen. (Bevor du es der ListBox hinzufügst)
 
Zuletzt bearbeitet:
Man kann doch die einzelnen Zeilen mit listbox.Items anspringen.

So etwa: listBox1.Items[0]

Dann ergänzt man einfach so den Text: listBox1.Items[0] = listBox1.Items[0].ToString() + " Test";
 
Aber wieso sollte ich alles in die ListBox machen um es dann später wieder rauszuholen ;).
Code:
int[] array = new int [] {1,2,3};
for(int i = 0; i < array.Length; i++)
{
     listbox.Items.Add(array[i]+" Text"+i); // oder statt " Text"+i was immer du gerne hättest ;)
}

Wieso also kompliziert, wenn es auch einfach geht? :evillol:
 
Zuletzt bearbeitet:
PapstRatze schrieb:
Aber wieso sollte ich alles in die ListBox machen um es dann später wieder rauszuholen ;).
Code:
int[] array = new int [] {1,2,3};
for(int i = 0; i < array.Length; i++)
{
     listbox.Items.Add(array[i]+" Text"+i); // oder statt " Text"+i was immer du gerne hättest ;)
}

Wieso also kompliziert, wenn es auch einfach geht? :evillol:

Hat wunderbar geklappt. Danke euch für die Hilfe.

In einer Sache bräuchte ich aber noch Hilfe: es geht darum, Elemente eines Arrays, welche bereits in einer Listbox ausgegeben sind in eine zweite Listbox zu transferieren, also praktisch zu verschieben. Es sollen jedoch nur ausgewählte(angeklickte) Elemete verschoben werden. Die ausgewählten Elemente bekomme ich problemlos hin(Selected.Item), aber ich habe keinen Anhaltspunkt wie ich ausgewählte Elemente in eine andere Listbox verschieben soll.

Gibt es dort einen Stichpunkt bzw. Befehl(hätte ich immerhin einen Anhaltspunkt für´s googeln).
 
Benutzt du eigentlich WPF oder WinForms? Denn die ganzen Schleifen sind ne ziemlich Katastrophe... für die Performance alles andere als optimal und entgegen der aktuelleren Paradigmen...
 
PapstRatze schrieb:
Aber wieso sollte ich alles in die ListBox machen um es dann später wieder rauszuholen ;).

Ich hatte die Problemstellung so verstanden, dass erst die Zahlen in die Box wandern und dann später durch Texte ergänzt werden sollen, also zwei Schritte notwendig sind.
Kann man natürlich auch der Einfachheit halber alles in einem Abwasch machen, wenns möglich ist :)
 
Habe mein Problem gestern selbst lösen können und mir bereits ein kleines schickes Programm geschrieben :)

Eine Frage habe ich aber noch: wie kann ich ein Array für alle im Programm freigeben? Ich habe aktuell ein Array, welches nur innerhalb der, ich glaube das nennt man Methode, funktioniert. Wenn ich dieses Array jetzt in Verbindung mit einem weiteren Befehl nutzen möchte, sagt mir der Compiler, dass dieses Array nicht vorhanden ist. Meine Frage ist also: wie kann ich das Array öffentlich machen?
 
Danke dir, das hatte ich bereits auch per Google gefunden gehabt, jedoch klappt das bei mir nicht.

Die erste Methode klappt perfekt(hier ist auch das Array, hab´s "public" gesetzt:
public void generieren_Click(object sender, EventArgs e)
{

eingabe.Items.Clear();

int[] testo;

testo = new int[3];

testo[0] = 10;
testo[1] = 20;
testo[2] = 30;

for (int i = 0; i < testo.Length; i++)


eingabe.Items.Add(testo+" Test");
list1.Items.Clear();
list1.Items.Add("Werte wurden erfolgreich ausgegeben");
list1.Items.Add("Bitte wählen Sie die zu verschiebenden Werte aus");
}


Und hier soll auf das Array zugegriffen werden:

public void zinssatz_Click(object sender, EventArgs e)
{
int z = Convert.ToInt32(zins.Text);
for (int i = 0; i < testo.Length; i++)

eingabe.Items.Add(testo*z + " Test");


}


Ich kriege als Fehler immer:
Der Name "testo"(so heißt mein Array) ist im aktuellen Kontext nicht vorhanden.

Danke für eure Geduld :evillol:
 
es müsste sowas sein wie:
Code:
namespace yournamespace
{
    public partial class MainWindow : Window
    {
        public MainWindow()
        {
            InitializeComponent();
        }
        private int[] ar = new int[3];
        public void yourmethods(int bla) { }
    }
}
#EDIT: Ps benutzt für den Code statt Zitat Code ;)
#EDIT2: @Darlis: verflucht ja, ich war wieder etwas voreilig ;). Natürlich, damit ist mein bedenken aus dem Vorpost auch weg. Variablen private und Properties public. Manchmal sollte ich auch meinen Kopf anschalten.
 
Zuletzt bearbeitet:
Du deklarierst das Array in der Methode generieren_Click, d.h. es ist nur dort gültig. Sobald die Methode verlassen wird gibt es das Array nicht mehr.

PapstRaze hat das Array in der Klasse deklariert, d.h. es ist ist für die ganze Klasse gültig und kann von deinen beiden Methoden benutzt werden. Sind diese in der selben Klasse, würde ich das Array als private markieren.
 
Da du dein Array in einer Methode generierst, ist es auch nur während der Laufzeit der Methode im Speicher vorhanden. Du musst das Array global deklaieren, oder als Übergabeparameter beim Methodenaufruf mitgeben.

also zB. so:

Code:
public class xyz {

int[] testo = new int[3];

public void generieren_Click(object sender, EventArgs e)
{

eingabe.Items.Clear();
testo[0] = 10;
testo[1] = 20;
testo[2] = 30;

for (int i = 0; i < testo.Length; i++)

eingabe.Items.Add(testo[i]+" Test");
list1.Items.Clear();
list1.Items.Add("Werte wurden erfolgreich ausgegeben");
list1.Items.Add("Bitte wählen Sie die zu verschiebenden Werte aus");
} 

public void zinssatz_Click(object sender, EventArgs e)
{
int z = Convert.ToInt32(zins.Text);
for (int i = 0; i < testo.Length; i++)

eingabe.Items.Add(testo[i]*z + " Test");

} 


}

Natürlich muss bei dieser Lösung zuerst auf generieren geklickt werden, da sonst nur Nullen beim klick auf Zinssatz ausgegeben werden.
 
Zuletzt bearbeitet:
Wenn du dem TE schon die Komplettlösung postest, dann aber auch richtig: Zeile 5 ist syntaktisch nicht korrekt. Und "global" ist das Array damit auch nicht (wäre auch schlechter Stil).
 
Jo habe wohl ein bisschen zu viel herumkopiert.
Global wird die variable natürlich nicht angelegt, sondern als Feld.
 
Zurück
Oben