Entwickler-Ecke

C# - Die Sprache - ObjectCollection


hanspeter - So 10.12.06 10:07
Titel: ObjectCollection
Hallo,
im Moment stehe ich etwas auf dem Schlauch.
Denke halt zuviel noch in Delphi.

Ich möchte die Items einer Listbox in einer Class füllen.
In der Klasse wird eine Stringliste generiert.

Also der Aufruf
MyClass(Listbox1.Items);

Items ist ja eine ObjectCollection.

Irgendwie bekomme ich in der Klassenmethode den Parameter nicht hin.

ObjectCollection List oder IList List bringen Fehler.
Kann mir wer einen Tip geben, wie der Parameter in der Klassenmethode korrekt aussieht?

Vielen Dank

Peter


JayK - So 10.12.06 12:01

Also ich persönlich hab das Problem noch nicht verstanden...

user profile iconhanspeter hat folgendes geschrieben:
Ich möchte die Items einer Listbox in einer Class füllen.
In der Klasse wird eine Stringliste generiert.

Du hast eine Klasse und da ist eine ListBox drin...

user profile iconhanspeter hat folgendes geschrieben:
Also der Aufruf
MyClass(Listbox1.Items);

Items ist ja eine ObjectCollection.

Und die Listbox in der Klasse möchtest du zu Anfang mit dem Inhalt dieser bereits vorher vorhandenen Listbox1 füllen?
Wozu würde dann in der Klasse selbst noch eine Stringliste generiert?

user profile iconhanspeter hat folgendes geschrieben:
Irgendwie bekomme ich in der Klassenmethode den Parameter nicht hin.

ObjectCollection List oder IList List bringen Fehler.
Kann mir wer einen Tip geben, wie der Parameter in der Klassenmethode korrekt aussieht?

Tipp: gucken, was für einen Typ du genau brauchst im Konstruktor und dann als Parameter auch diesen Typ verlangen. ;)
Ich glaube aber, soweit warst du auch schon.

Hab schon ne Weile nich mehr mit der Listbox gearbeitet, hoffe dass ich trotzdem keinen Müll erzähle.

Wie heißt eigentlich die Fehlermeldung?


hanspeter - So 10.12.06 12:46

Also nochmal.
Ich will die Items einer Listbox füllen.

Aufruf:


C#-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
 Class1 Klasse = new Class1();  // Hier wird die Klasse definiert

        public Form1()
        {
            InitializeComponent();
        }

        private void button1_Click(object sender, EventArgs e)
        {
            Klasse.InitListbox(listBox1.Items);  // Aufruf

        }



Die Klasse selbst:


C#-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
 class Class1
    {
        public DirectoryInfo ds;
        public Class1()
        { DirectoryInfo ds = new DirectoryInfo("D:\\Bild\\Eigene");
          FileSystemInfo[] infos = ds.GetFileSystemInfos();

        }
        public void InitListbox(ObjectCollection Liste)
        {
            Liste.Clear;
            foreach (FileSystemInfo i in Infos)
            {
                Liste.Add(i);
            }
        }
    }


Ich suche für Liste den gültigen Parametertyp.
Da ObjectCollection generisch ist, habe ich damit ein Problem.

Gruß
Peter

Moderiert von user profile iconChristian S.: C#-Tags hinzugefügt


Christian S. - So 10.12.06 13:03
Titel: Re: ObjectCollection
user profile iconhanspeter hat folgendes geschrieben:
In der Klasse wird eine Stringliste generiert.
In der Klasse weiter unten hast Du aber keine Stringliste :gruebel: In die Listbox von .NET bist Du aber auch nicht auf Strings festgelegt ;-)

user profile iconhanspeter hat folgendes geschrieben:
Irgendwie bekomme ich in der Klassenmethode den Parameter nicht hin.
Ich glaube, Du meinst in der "Methode der Klasse", eine Klassenmethode ist was anderes. :-)

user profile iconhanspeter hat folgendes geschrieben:
ObjectCollection List oder IList List bringen Fehler
Welchen Fehler?



user profile iconhanspeter hat folgendes geschrieben:

C#-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
 class Class1
    {
        public DirectoryInfo ds;
        public Class1()
        { DirectoryInfo ds = new DirectoryInfo("D:\\Bild\\Eigene");
          FileSystemInfo[] infos = ds.GetFileSystemInfos();

        }
        public void InitListbox(ObjectCollection Liste)
        {
            Liste.Clear;
            foreach (FileSystemInfo i in Infos)
            {
                Liste.Add(i);
            }
        }
    }

In InitListBox ist "Infos" doch gar nicht mehr definiert. Im Konstruktor deklarierst Du "ds" neu, da wird das "ds" der Klasse wahrscheinlich gar nicht benutzt (müsste das nicht sogar einen Fehler geben?). Nicht zum Problem gehörend: Muss "ds" wirklich public sein?

user profile iconhanspeter hat folgendes geschrieben:
Da ObjectCollection generisch ist, habe ich damit ein Problem.
Nein, sie ist nicht generishc. Allerdings hört sie auf den Namen "ListBox.ObjectCollection".


hanspeter - So 10.12.06 18:44
Titel: Die Lösung
Also hier ist die Lösung. Die Fehlermeldung von VS2005 war etwas verwirrend.

ObjectCollection ist nicht definiert. Fehlt ein Using...

Hier muss eine komplette Declaration des Zugriffsweges erfolgen.
Also
(System.Windows.Forms.ListBox.ObjectCollection Liste)

Hier der funktionierende Code:


C#-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
 class Class1
    {
       
        DirectoryInfo ds = new DirectoryInfo("D:\\Bild\\Eigene Pferde");
        public Class1()
        {
        }
        public void InitListbox(System.Windows.Forms.ListBox.ObjectCollection Liste)
           { 
             FileSystemInfo[] infos =  ds.GetFileSystemInfos();
             Liste.Clear();
             foreach (FileSystemInfo i in infos)            
             {
                Liste.Add(i.Name);
            }
        }
    }


Vielen Dank für die wertvollen Hinweise.

Mit Gruß
Peter


Kha - Mo 11.12.06 14:39
Titel: Re: Die Lösung
user profile iconhanspeter hat folgendes geschrieben:
Hier muss eine komplette Declaration des Zugriffsweges erfolgen.
Nein, muss sie nicht, wie Christian schon schrob.

PS: Als Parametertyp solltest du eher einfach IList benutzen.