Benutzer mit den meisten Antworten
Liste aller logischen Laufwerke in Combobox

Frage
-
Hallo,
ich möchte alle meine logischen Laufwerke in einer "Combobox" auflisten und in einer 2. "Combobox" das Ziellaufwerk auswählen können.
Was mach ich falsch?private void comboBox1_SelectedIndexChanged(object sender, EventArgs e) { comboBox1.Items.AddRange(Environment.GetLogicalDrives());
Gruß Hilko
Antworten
-
Hallo,
Nein. Es geht darum das du der Items Collection bei irgendeiner initialisierenden Methode die Elemente mitgibst. also Konstruktor der Form oder die Load Methode der Form oder aber auch in irgendeiner anderen Methode nur eben nicht SelectedIndexChanged. Der Index kann sich eben nicht ändern
wenn keine Elemente in der Auflistung sind.
Hier ein Code beispiel. eine einfache form mit zwei comboboxen die die vorhandenen Laufwerke listen:
using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Windows.Forms; namespace WinFormTestProject { public partial class Form1 : Form { public Form1() { InitializeComponent(); } private void Form1_Load(object sender, EventArgs e) { comboBox1.Items.AddRange(Environment.GetLogicalDrives()); comboBox2.Items.AddRange(Environment.GetLogicalDrives()); } } }
- Als Antwort vorgeschlagen as_1985 Dienstag, 18. Oktober 2011 06:53
- Als Antwort markiert Robert BreitenhoferModerator Dienstag, 8. November 2011 14:26
-
Hi Hilko,
versuche das mal:
XAML
<Window x:Class="WpfApplication2.MainWindow" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" Title="MainWindow" Height="60" Width="125" x:Name="mainWnd"> <Grid> <ComboBox ItemsSource="{Binding ElementName=mainWnd, Path=LogicalDrives}" /> </Grid> </Window>
CSusing System; using System.Collections.Generic; using System.Windows; namespace WpfApplication2 { /// <summary> /// Interaction logic for MainWindow.xaml /// </summary> public partial class MainWindow : Window { private IEnumerable<string> _logicalDrives; public MainWindow() { this.InitializeComponent(); } public IEnumerable<string> LogicalDrives { get { return this._logicalDrives ?? (this._logicalDrives = Environment.GetLogicalDrives()); } } } }
Viel Erfolg!
"It's time to kick ass and chew bubble gum... and I'm all outta gum." - Duke Nukem- Als Antwort markiert Robert BreitenhoferModerator Dienstag, 8. November 2011 14:26
-
Bei mir funktionieren die Lösungen, hier vielleicht noch was, was dir helfen kann
System.IO.DriveInfo[] laufwerke = System.IO.DriveInfo.GetDrives(); comboBox3.Items.AddRange(laufwerke);
- Als Antwort vorgeschlagen as_1985 Mittwoch, 19. Oktober 2011 06:43
- Als Antwort markiert Robert BreitenhoferModerator Dienstag, 8. November 2011 14:26
-
Hallo,
hier mal ein kompletter Code, allerdings mit einem ListView, dass musst du halt noch entsprechend Anpassen.
System.IO.DriveInfo[] aD = System.IO.DriveInfo.GetDrives(); foreach (System.IO.DriveInfo d in aD) { ListViewItem ls = new ListViewItem(); ls.Text = d.Name; ls.SubItems.Add(d.DriveType.ToString()); if (d.IsReady != false) { ls.SubItems.Add(d.VolumeLabel); ls.SubItems.Add(d.DriveFormat); } listView1.Items.Add(ls); }
- Als Antwort vorgeschlagen as_1985 Mittwoch, 19. Oktober 2011 06:42
- Bearbeitet as_1985 Mittwoch, 19. Oktober 2011 06:43
- Als Antwort markiert Robert BreitenhoferModerator Dienstag, 8. November 2011 14:26
Alle Antworten
-
Hae? Warum reicht ein einfaches
public partial class Form1 : Form { public Form1() { InitializeComponent(); comboBox1.Items.AddRange(Environment.GetLogicalDrives()); } }
nicht? Und was hat es mit der zweiten ComboBox auf sich? Wozu brauchst du diese? -
Hallo,
Dein Problem ist von wo du versuchst die Laufwerke der Auflistung hinzuzufügen.
SelectedIndexChanged kann nicht aufgerufen werden solage du noch keine Elemente in der Auflistung hast.
rufe AddRage z.B. von Formload() auf.
- Bearbeitet sniper369 Montag, 17. Oktober 2011 08:49
-
Hallo Stefan,
Vielen Dank für Deine Antwort, ich war der Ansicht das es reicht wenn ich die Zeile " comboBox1.Items.AddRange(Environment.GetLogicalDrives());" aufrufe wenn das "Event" ausgelöst wird und das mit dieser Zeile die Laufwerke auch gleich in die "COMBOBOX" geschrieben werden.
Wann ich dich aber richtig verstehen muss ich erst ein Opjekt erzugen die mir die Infos der Laufwerke zusammen sucht und dieses Opjekt dann aufrufen wenn das "Event" statt findet.
Richtig?
wann es Dir nicht zuviel Mühe macht sei so nett und screibe mir ein Code-Beispiel dazu mit einer Kurzen erleuterung.
Gruß Hilko -
Hallo,
Nein. Es geht darum das du der Items Collection bei irgendeiner initialisierenden Methode die Elemente mitgibst. also Konstruktor der Form oder die Load Methode der Form oder aber auch in irgendeiner anderen Methode nur eben nicht SelectedIndexChanged. Der Index kann sich eben nicht ändern
wenn keine Elemente in der Auflistung sind.
Hier ein Code beispiel. eine einfache form mit zwei comboboxen die die vorhandenen Laufwerke listen:
using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Windows.Forms; namespace WinFormTestProject { public partial class Form1 : Form { public Form1() { InitializeComponent(); } private void Form1_Load(object sender, EventArgs e) { comboBox1.Items.AddRange(Environment.GetLogicalDrives()); comboBox2.Items.AddRange(Environment.GetLogicalDrives()); } } }
- Als Antwort vorgeschlagen as_1985 Dienstag, 18. Oktober 2011 06:53
- Als Antwort markiert Robert BreitenhoferModerator Dienstag, 8. November 2011 14:26
-
Hallo Sniper,
vielen Dank für Deine Hilfe ich habe den Code umgeschriben, so wie in deinem Beispiel, aber es werden immer noch keine Laufwerke in den Comboboxen angezeigt.
using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Windows.Forms; namespace Datensicherung { public partial class Form1 : Form { public Form1() { InitializeComponent(); } private void Form1_Load(object sender, EventArgs e) { comboBox1.Items.AddRange(Environment.GetLogicalDrives()); comboBox2.Items.AddRange(Environment.GetLogicalDrives()); } } }
ich würdemich sehr freuen wenn Du mir nochmal weiter helfen würdest.Gern sende ich Die auch das gesamte Projekt per mail.
Gruß Hilko -
Hi Hilko,
versuche das mal:
XAML
<Window x:Class="WpfApplication2.MainWindow" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" Title="MainWindow" Height="60" Width="125" x:Name="mainWnd"> <Grid> <ComboBox ItemsSource="{Binding ElementName=mainWnd, Path=LogicalDrives}" /> </Grid> </Window>
CSusing System; using System.Collections.Generic; using System.Windows; namespace WpfApplication2 { /// <summary> /// Interaction logic for MainWindow.xaml /// </summary> public partial class MainWindow : Window { private IEnumerable<string> _logicalDrives; public MainWindow() { this.InitializeComponent(); } public IEnumerable<string> LogicalDrives { get { return this._logicalDrives ?? (this._logicalDrives = Environment.GetLogicalDrives()); } } } }
Viel Erfolg!
"It's time to kick ass and chew bubble gum... and I'm all outta gum." - Duke Nukem- Als Antwort markiert Robert BreitenhoferModerator Dienstag, 8. November 2011 14:26
-
Bei mir funktionieren die Lösungen, hier vielleicht noch was, was dir helfen kann
System.IO.DriveInfo[] laufwerke = System.IO.DriveInfo.GetDrives(); comboBox3.Items.AddRange(laufwerke);
- Als Antwort vorgeschlagen as_1985 Mittwoch, 19. Oktober 2011 06:43
- Als Antwort markiert Robert BreitenhoferModerator Dienstag, 8. November 2011 14:26
-
Hallo Hilko,
nur um sicher zu sein: Hast Du auch die combobox aufgeklappt und nachgesehen ? Als default ist die SelectedIndex property auf -1 gesetzt.
Hannes
If you have got questions about this, just ask.
In a perfect world,
users would never enter data in the wrong form,
files they choose to open would always exist
and code would never have bugs.
C# to VB.NET: http://www.developerfusion.com/tools/convert/csharp-to-vb/ -
Hallo Hilko,
Also so langsam wundert mich das doch ein bisschen. Wenn du kannst stell dein Projekt mal irgendwo online und schick uns den Link.
Ich weiß grad nicht ob ich hier im Forum eine pm Funktion habe. Und Email Adressen schreibe ich für gewönhlich nicht in öffentliche Foren.
Hast du es auch schon als WPF Projekt versucht so wie Do Django es vorgeschlagen hat?
Wie gesagt wenn du uns dein Projekt irgendwie zur Verfügung stellen kannst findet sich bestimmt schnell die Lösung. Ansonsten könntest du auch nochmal ein neues Projekt anlegen und das da Testen.
Grüße,
Sniper
-
Hallo as_1985
danke für deinene Hilfe, hat sehr gut geklappt das einzige Problem das ich jetzt noch habe ist zu Laufwerks-Buchstaben auch noch den Name des laufwerkes anzeigen zuu lassen.
Die Klasse DriveInfo hat doch die eigenschaft "Name" oder?
Nur wohin mit der Eingenschaft.
System.IO.DriveInfo [] laufwerke = System.IO.DriveInfo.GetDrives(<strong>Name</strong>); comboBox1.Items.AddRange(laufwerke); comboBox2.Items.AddRange(laufwerke);
So gehts nicht.
Bitte schreib mir ein Code Beispiel.
Gruß Hilko -
Hallo,
hier mal ein kompletter Code, allerdings mit einem ListView, dass musst du halt noch entsprechend Anpassen.
System.IO.DriveInfo[] aD = System.IO.DriveInfo.GetDrives(); foreach (System.IO.DriveInfo d in aD) { ListViewItem ls = new ListViewItem(); ls.Text = d.Name; ls.SubItems.Add(d.DriveType.ToString()); if (d.IsReady != false) { ls.SubItems.Add(d.VolumeLabel); ls.SubItems.Add(d.DriveFormat); } listView1.Items.Add(ls); }
- Als Antwort vorgeschlagen as_1985 Mittwoch, 19. Oktober 2011 06:42
- Bearbeitet as_1985 Mittwoch, 19. Oktober 2011 06:43
- Als Antwort markiert Robert BreitenhoferModerator Dienstag, 8. November 2011 14:26