Autor Beitrag
pascalsv
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 133

Win XP Prof. SP2 / Windows 7
Visual Studio 2008 / Silverlight 3 / Silverlight 4 Beta
BeitragVerfasst: Di 16.09.08 10:57 
Hallo zusammen,

ich rufe in einer Methode eine andere Form auf. Darauf sitzen zwei listboxes zwischen denen ich Einträge hin- und herschiebe. Wird nun ein Button geklickt, will ich in der aufrufenden Methode den Inhalt der Listbox "lbChosenQueries" mitbekommen. Gibt es einen eleganteren Weg als diesen:

ausblenden C#-Quelltext
1:
2:
3:
4:
5:
6:
7:
            fQueries queriesForm = new fQueries(queryListResponse);
            if (queriesForm.ShowDialog() == DialogResult.OK)
            {
                String [] arrayQueries = null;
                for (int i = 0; i < queriesForm.lbChosenQueries.Items.Count; i++)
                    arrayQueries[i] = (string)queriesForm.lbChosenQueries.Items[i];
            }


Danke,

Pascal
Kha
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 3803
Erhaltene Danke: 176

Arch Linux
Python, C, C++ (vim)
BeitragVerfasst: Di 16.09.08 13:12 
"Items" besitzt auch eine CopyTo-Methode. In beiden Fällen musst du allerdings erst einmal ein leeres Array erstellen, sonst fliegt dir (wie du wahrscheinlich schon bemerkt hast) eine Exception um die Ohren.

_________________
>λ=
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: Di 16.09.08 13:18 
Hallo Pascal,

user profile iconpascalsv hat folgendes geschrieben:
Gibt es einen eleganteren Weg als diesen:

Ja. Du musst im rufenden Formular einen EventHandler/Delegate schreiben, der durch das Button.Click ausgelöst wird und die gewünschten Änderungen übernimmt:
ausblenden C#-Quelltext
1:
2:
3:
4:
5:
6:
private void GetInformation(object sender, EventArgs e) {
  //  werte Daten aus
}

fQueries queriesForm = new fQueries(queryListResponse); 
queriesForm.MyButtonClick += GetInformation;

Das Problem bei dieser Lösung bleibt, dass in der GetInformation-Methode die Elemente von queriesForm nicht bekannt sind und Du keinen Zugriff auf die Controls hast. Eine bessere Lösung ist deshalb, eine eigene EventArgs-Klasse und einen passenden Delegate zu definieren, indem bestimmte Informationen - wie in Deinem String-Array - übergeben werden.

Eine Einführung über Delegates findest Du z.B. in OpenBook Visual C# Kap.4.4.

Übrigens solltest Du auf String-Arrays möglichst verzichten; besser ist fast immer List<string>.

Gruß Jürgen

/Edit
Wenn Dich das Ergebnis erst nach dem Schließen des Unterformulars interessiert, geht es auch so, wie Du es gemacht hast. Du solltest aber nicht ListBox.Items abfragen, sondern (weil Dich eine String-Liste interessiert) eine solche als Eigenschaft zur Verfügung stellen und diese innerhalb des Unterformulars erstellen. Dazu ist auch Kha's Hinweis sehr hilfreich.


Zuletzt bearbeitet von JüTho am Di 16.09.08 13:22, insgesamt 1-mal bearbeitet
pascalsv Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 133

Win XP Prof. SP2 / Windows 7
Visual Studio 2008 / Silverlight 3 / Silverlight 4 Beta
BeitragVerfasst: Di 16.09.08 13:18 
Gute Idee!!!

Das mache ich, danke!!

Pascal