Autor Beitrag
Phatpat
Hält's aus hier
Beiträge: 3



BeitragVerfasst: Mo 26.04.10 14:18 
Hallo Zusammen

Ich bin ein absoluter C#-Anfänger. Zu meiner Frage:

Ich erstelle ein WPF-Anwendung.
Anschliessend will ich aus einer Klasse auf ein Listboxelement zugreifen.

Window1.listBox.Items.Clear();

Wieso geht das nicht?

Vielen Dank für allfällige Antworten!!
Patrick
danielf
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 1012
Erhaltene Danke: 24

Windows XP
C#, Visual Studio
BeitragVerfasst: Mo 26.04.10 14:27 
Hallo und :welcome:,

was meinst du, dass du "aus einer Klasse" auf das Listboxelement zugreifenwillst?

Ist es die partial class des Window? Dann sollte es gehen.

Handelt es sich dabei um eine andere Klasse funktioniert es so nicht, weil die Sichtbarkeit nicht gegeben ist. Dann müsstest du das Steuerelement explizit sichtbar machen (etwa über ein property: public ListBox { get { return listBox; } }). Dies ist aber keine gute Lösung. Um eine bessere zu finden, sind ein paar extra Informationen notwendig.

Gruß
Phatpat Threadstarter
Hält's aus hier
Beiträge: 3



BeitragVerfasst: Mo 26.04.10 14:39 
vielen dank schon mal für deine Antwort!!

nein nicht aus der partial class Window, sondern aus einer anderen...

kann ich einfach in der der class Window1 schreiben:
public Listbox
{
get
{
return Listbox;
}
}

?

oder was wäre denn eine gute Lösung? Welche Informationen bräuchtest du?
danielf
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 1012
Erhaltene Danke: 24

Windows XP
C#, Visual Studio
BeitragVerfasst: Mo 26.04.10 15:10 
Du könntest das so schreiben, aber wie gesagt, das wäre nicht "schön".

Folgende Struktur hat sich in der Software-Entwicklung durchgesetzt:

Daten - Logik - Präsentation

Soll heißen auf der einen Seite hast du Daten. Dazwisch hast du evtl. eine logische Schicht die etwa die Daten sammelt, sortiert oder filtert. Dein Window ist ja wahrscheinlich dafür da, Daten anzuzeigen. Dann sollte das Window als Schnittstelle nur die Daten haben. Sprich in etwa ein Property Person um eine Person darzustellen:
ausblenden C#-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
public Person Person {
   get { return _person; }
   set {
       if (_person != value)
       {
         _person = value;
          ShowPerson(_person);
       } 
   }
}


Du solltest keine spezifischen Details der Präsentationsschicht preisgeben. Sprich in deinem Fall das du ein ListBox verwendest. Ansonsten hast du später Probleme, wenn du aus der Listbox ein TreeView machst.

Informationen die fehlen sind allgemein: Was willst du mit ListBox bezwecken, welche Daten werden getauscht, was hast du später noch damit vor?
Phatpat Threadstarter
Hält's aus hier
Beiträge: 3



BeitragVerfasst: Mo 26.04.10 15:13 
das sit mir alles noch ein wenig zu hoch :)
ich versuch es mal umzusetzen!!!! Vielen Dank!! :-)
JüTho
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 2021
Erhaltene Danke: 6

Win XP Prof
C# 2.0 (#D für NET 2.0, dazu Firebird); früher Delphi 5 und Delphi 2005 Pro
BeitragVerfasst: Mo 26.04.10 15:17 
Hallo und noch :welcome:

Grundsätzlich: Eine Klasse hat auf ein Objekt einer anderen Klasse nur Zugriff über eine fest definierte "Schnittstelle" (das hat jetzt nichts mit Interface zu tun). Eine Klasse, die ein Objekt erzeugt, hat Kenntnis über die Elemente, die als public deklariert wurden. Ein Objekt, das von einer anderen Klasse erzeugt wurde, hat keinerlei Kenntnis über die erzeugende Klasse. Controls innerhalb eines Formulars werden eigentlich niemals als public deklariert; wenn überhaupt, dann werden die Inhalte "von außen" über Eigenschaften oder public-Methoden beeinflusst.

Konkret: 1. Wenn du von einem Objekt sprichst, das vom Formular erzeugt wurde, kann das Formular dieses Objekt beeinflussen, aber nicht umgekehrt. Wenn es nötig ist, dann holt sich das Formular bestimmte Informationen per Eigenschaft von diesem Objekt. Wenn es sich um eine automatische "Rückgabe" von Werten handelt, geht das über einen Delegate. (Das führt aber zu weit, das jetzt ins Blaue hinein zu erläutern.)

2. Wenn das "andere" Objekt das Formular erzeugt hat, hat es direkten Einfluss auf das Formular, aber nicht unmittelbar auf eine ListBox, sondern z.B. auf eine Methode, die (innerhalb des Formulars) die ListBox beeinflusst.

Deshalb will Daniel die Situation genauer wissen: In welcher Beziehung stehen Formular und Objekt? Wie sollen sich Eigenheiten oder Elemente beeinflussen?

Gruß Jürgen