Visual C# 2008 2 Listboxen

Liebe/-r Experte/-in,
ich habe mal eine Frage zu Visual C# 2008.Ich habe 2 Listboxen.Listbox 1 ist der Master,Listbox 2 der Slave.Wenn ich z.B. in Listbox 1 ein Pkw anklicke,möchte ich in Listbox 2 die dazu gehörenden Ersatzteile aufgelistet haben(Ohne Datenbank).Ich habe eine Klasse Pkw und eine Klasse Ersatzteile erstellt,beide mit korrespondierenden Kennzeichen.Wie verbinde ich jetzt die Objekte der Pkw-Klasse mit der Ersatzteile-Klasse?Ich möchte alle Ersatzteile in einer Loop durchlaufen und nur die passenden in einer 2.Listbox anzeigen.Evtl. kann ich mal den Code mailen.

Viele Grüsse und Danke in voraus

Peter Wohlrapp(Visual C# Beginner)
[email protected]

Hi Peter!

Ich würde in die Klasse PKW eine generische Liste vom Typ Ersatzteil-Klasse anlegen. Dann kannst du beim Klick in die PKW-Listbox auf die interne generische Liste zugreifen und mit der Liste die Ersatzteil-ListBox füllen.

Anlegen der Liste in der Klasse PKW
private List m_oList = new List;

Anschließend kannst du die schleifengesteuert füllen.
Ich hoffe, ich konnte dir ein wenig weiter helfen.

Viele Grüße,
René

Hallo René

vielen Dank für Deine Antwort.Wärst Du so nett und ergänzt meine Klasse Pkw(Class1)? Siehe unten.Vielen Dank im voraus.

Mit freundlichem Gruss

Peter
**************************************************
class Class1
{
string kzauto;
string fahrzeug;
public Class1(string kezi, string fz)
{
kzauto = kezi;
fahrzeug = fz;
}
public string Hol_pkw_kz
{
get { return kzauto; }
}
public string Hol_pkw
{
get { return fahrzeug; }
}
}
class Class2
{
string kzteile;
string ersatzteil;
public Class2(string k, string e)
{
kzteile = k;
ersatzteil = e;
}
public string Hol_teil_kz
{
get { return kzteile; }
}
public string Hol_teile
{
get { return ersatzteil; }
}
}

So sollte es klappen:

class Class1
{
string kzauto;
string fahrzeug;
private List m_oErsatzteilList = new List();

public Class1(string kezi, string fz)
{
kzauto = kezi;
fahrzeug = fz;

m_oErsatzteilList.Add(new Class2(„4711“, „Motorhaube“);
m_oErsatzteilList.Add(new Class2(„4712“, „Tür“);
m_oErsatzteilList.Add(new Class2(„4713“, „Reifen“);
}
public string Hol_pkw_kz
{
get { return kzauto; }
}
public string Hol_pkw
{
get { return fahrzeug; }
}
}
public List ErsatzteilListe
{
get { return m_oErsatzteilList; }
}

class Class2
{
string kzteile;
string ersatzteil;
public Class2(string k, string e)
{
kzteile = k;
ersatzteil = e;
}
public string Hol_teil_kz
{
get { return kzteile; }
}
public string Hol_teile
{
get { return ersatzteil; }
}
}

So als kleiner Tipp :smiley: sprechende Namen sind manchmal sehr hilfreich!

Viele Grüße,
René

So sollte es klappen:

class Class1
{
string kzauto;
string fahrzeug;
private List m_oErsatzteilList = new
List();

public Class1(string kezi, string fz)

{

kzauto = kezi;
fahrzeug = fz;

m_oErsatzteilList.Add(new Class2(„4711“, „Motorhaube“);
m_oErsatzteilList.Add(new Class2(„4712“, „Tür“);
m_oErsatzteilList.Add(new Class2(„4713“, „Reifen“);
}
public string Hol_pkw_kz
{
get { return kzauto; }
}
public string Hol_pkw
{
get { return fahrzeug; }
}
}
public List ErsatzteilListe
{
get { return m_oErsatzteilList; }
}

class Class2
{
string kzteile;
string ersatzteil;
public Class2(string k, string e)
{
kzteile = k;
ersatzteil = e;
}
public string Hol_teil_kz
{
get { return kzteile; }
}
public string Hol_teile
{
get { return ersatzteil; }
}
}

So als kleiner Tipp :smiley: sprechende Namen sind manchmal sehr
hilfreich!

Viele Grüße,
René

Hallo Rene,
nochmal vielen Dank,
kannst Du mir bitte nochmal helfen und zwar kommt beim Erstellen „Klasse,Delegat,Enumeration,Schnittstelle oder Struktur erwartet“ bei der Zeile
public List ErsatzteilListe
da markiert er das List.Hast Du nochmal einen Tip ?
Danke nochmal
Peter

Ja, das war ein Copy-Paste-Fehler :smile: sorry.
Ich hatte die Klassen für mich sprechend umbenannt und anschließend wohl nicht wieder komplett zurück umbenannt auf dein Beispiel. Deine Class2 hatte ich in cErsatzteil umbenannt. Also überall, wo bei dir noch cErsatzteil steht, muss Class2 stehen (im Constructor nach new und in der Property zum Holen der Liste).

Hallo Rene,
vielen Dank für die Antwort,ich habe die Zeile
public List ErsatzteilListe jetzt in
public List ErsatzteilListe umgeschrieben,
der Fehler
„Klasse,Delegat,Enumeration,Schnittstelle oder Struktur erwartet“ ist aber immer noch da.Wärst Du nochmal so nett … ??

Mit freundlichem Gruss

Peter

Da du nirgendwo mit public und private gearbeitet hast, kann das sein, dass der Fehler daher rührt. Ich habe mir erlaubt, dein Beispiel etas sprechender zu überarbeiten und überall entsprechend die publics und privates zu setzen. Beim durchkompilieren/ durchdebuggen bei mir gerade trat kein Fehler auf.

public class cKfz
{
private string _sKfzID = string.Empty;
private string _sKfzMarke = string.Empty;
private List m_oErsatzteilList = new List();

public cKfz(string sKfzKennzeichen, string sKfzMarke)
{
_sKfzID = sKfzKennzeichen;
_sKfzMarke = sKfzMarke;

m_oErsatzteilList.Add(new cErsatzteil(„4711“, „Motorhaube“));
m_oErsatzteilList.Add(new cErsatzteil(„4712“, „Tür“));
m_oErsatzteilList.Add(new cErsatzteil(„4713“, „Reifen“));
}

public string KfzKennzeichen
{
get { return _sKfzID; }
}

public string KfzMarke
{
get { return _sKfzMarke; }
}

public List ErsatzteilListe
{
get { return m_oErsatzteilList; }
}
}

public class cErsatzteil
{
private string _sID;
private string _sBezeichnung;

public cErsatzteil(string sID, string sBezeichnung)
{
_sID = sID;
_sBezeichnung = sBezeichnung;
}

public string ErsatzteilID
{
get { return _sID; }
}

public string ErsatzteilBezeichnung
{
get { return _sBezeichnung; }
}
}

Viele Grüße,
René

Hallo Rene,
das ist es!Hab vielen herzlichen Dank.

Peter

Prima, das freut mich, gern geschehen!

Viele Grüße,
René

Hallo Rene,
das ist es!Hab vielen herzlichen Dank.

Peter

Hallo René,
darf ich Dein fundiertes Wissen nochmal anzapfen?Es geht um das Füllen der Listbox2 bzw.anzeigen derselben wenn ich in ListBox1 einen Pkw anklicke.Ich dachte mir,ich gehe dann durch alle Ersatzteile und filter die passenden Ersatzteileteile raus.Leider stellt sich bei mir der gewünschte Erfolg nicht ein.Ich füge den Code mal unten an.Danke nochmal

Gruss
Peter
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private List pkw = new List();
private List eteil = new List();
private void Form1_Load(object sender, EventArgs e)
{
pkw.Add(new cKfz(„4711“,„Ford“));
pkw.Add(new cKfz(„4712“,„VW“));
pkw.Add(new cKfz(„4713“,„BMW“));
listBox1.DataSource = pkw;
listBox1.DisplayMember = „KfzMarke“;
listBox1.ValueMember = „KfzKennzeichen“;
}
private void listBox1_SelectedIndexChanged(object sender, EventArgs e)
{
for (int j = 0; j

Hallo Peter!

Wenn du die Klassen noch so hast, wie ich sie dir gestern geschickt haben, ist das relativ einfach:

  1. Der Constructor der Klasse cKfz muss erweitert werden, dass man die Ersatzteilliste mit hinein gibt.

  2. Die übergebene Liste muss innerhalb des Constructors in die interne Liste gegeben werden. Dazu muss eine neue Instanz der Liste angelegt werden. Wenn man die Listen einfach mit „=“ übertragen möchte, stellt man schnell fest, dass nur die Speicheradresse übertragen wird und wenn ich die übergebene Liste leere, die interne (die auf den Speicher zugreift) automatisch halt auch leer ist.

  3. Im Form_Load müssen die Kfz mit Ersatzteilen versehen werden.

  4. Im listBox1_SelectedIndexChanged kann einfach die interne Ersatzteilliste, abgegriffen über die Property im Kfz, als DataSource an die 2. Listbox gehängt werden. Das ist halt das schöne an internen Listen, wenn man Abhängigkeiten darstellen muss :smile:

Hier der Code:
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private List pkw = new List();
private List eteil = new List();

private void Form1_Load(object sender, EventArgs e)
{
List oList = new List();

//Anlegen der Ersatzteile für Kfz 4711
oList.Add(new cErsatzteil(„0001“, „Motorhaube“));
oList.Add(new cErsatzteil(„0002“, „Tür“));
oList.Add(new cErsatzteil(„0003“, „Reifen“));
//Anlegen Kfz 4711
pkw.Add(new cKfz(„4711“, „Ford“, oList));
//Liste leeren
oList.Clear();

//Anlegen der Ersatzteile für Kfz 4711
oList.Add(new cErsatzteil(„0001“, „Motorhaube“));
oList.Add(new cErsatzteil(„0004“, „Lenkrad“));
oList.Add(new cErsatzteil(„0007“, „Blinker“));
//Anlegen Kfz 4711
pkw.Add(new cKfz(„4712“, „VW“, oList));
//Liste leeren
oList.Clear();

//Anlegen der Ersatzteile für Kfz 4711
oList.Add(new cErsatzteil(„0005“, „Scheibenwischer“));
oList.Add(new cErsatzteil(„0002“, „Tür“));
oList.Add(new cErsatzteil(„0006“, „Öl“));
//Anlegen Kfz 4711
pkw.Add(new cKfz(„4713“, „BMW“, oList));
//Liste leeren
oList.Clear();

listBox1.DataSource = pkw;
listBox1.DisplayMember = „KfzMarke“;
listBox1.ValueMember = „KfzKennzeichen“;
}

private void listBox1_SelectedIndexChanged(object sender, EventArgs e)
{
//for (int j = 0; j _oErsatzteilList = new List();

public cKfz(string sKfzKennzeichen, string sKfzMarke, List oErsatzteilList)
{
_sKfzID = sKfzKennzeichen;
_sKfzMarke = sKfzMarke;

_oErsatzteilList = new List(oErsatzteilList);
}

public string KfzKennzeichen
{
get { return _sKfzID; }
}

public string KfzMarke
{
get { return _sKfzMarke; }
}

public List ErsatzteilListe
{
get { return _oErsatzteilList; }
}
}

public class cErsatzteil
{
private string _sID;
private string _sBezeichnung;

public cErsatzteil(string sID, string sBezeichnung)
{
_sID = sID;
_sBezeichnung = sBezeichnung;
}

public string ErsatzteilID
{
get { return _sID; }
}

public string ErsatzteilBezeichnung
{
get { return _sBezeichnung; }
}
}

Ich hoffe, ich konnte dir damit weiter helfen.

Viele Grüße,
René

Hallo René
Genial(für mich als Anfänger zumindest).Du kannst es!
Ich werde mir das PGM nochmal in Ruhe zu Gemüte führen.
Bist Du eigentlich hauptberuflich Programmierer ?

Viele Grüsse und vielen herzlichen Dank nochmal

Peter

Vielen Dank :smile: hört man ja auch mal gerne.

Ja, ich mache 10 Stunden am Tag nichts anderes als Software entwickeln :smile:

Viele Grüße,
René