none
Liste aller logischen Laufwerke in Combobox RRS feed

  • Frage

  • Hallo,

    ich möchte alle meine logischen Laufwerke in einer "Combobox" auflisten und in einer 2. "Combobox" das Ziellaufwerk auswählen können.

    private void comboBox1_SelectedIndexChanged(object sender, EventArgs e)
            {
                comboBox1.Items.AddRange(Environment.GetLogicalDrives());
    
    Was mach ich falsch?


    Gruß Hilko
    Samstag, 15. Oktober 2011 17:11

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());
            }
        }
    }
    


    Montag, 17. Oktober 2011 11:32
  • 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>
    
    


    CS

    using 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
    Montag, 17. Oktober 2011 22:41
  • 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);
    


    Dienstag, 18. Oktober 2011 06:53
  • 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);
                }
    


     


    Mittwoch, 19. Oktober 2011 06:42

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?

    Samstag, 15. Oktober 2011 17:51
  • ich möchte aus den "combobox1" und "combobox2"ein Quell- und ein Ziel-Laufwerk ausswählen.

     


    Gruß Hilko
    Sonntag, 16. Oktober 2011 20:44
  • 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
    Montag, 17. Oktober 2011 08:48
  • Dann musst du lediglich beide ComboBoxen im entsprechenden Ereignis (z.B. im Formularkonstruktur) befüllen.
    Montag, 17. Oktober 2011 09:53
  • 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
    Montag, 17. Oktober 2011 10:17
  • 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());
            }
        }
    }
    


    Montag, 17. Oktober 2011 11:32
  • 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
    Montag, 17. Oktober 2011 22:12
  • 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>
    
    


    CS

    using 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
    Montag, 17. Oktober 2011 22:41
  • 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);
    


    Dienstag, 18. Oktober 2011 06:53
  • 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/
    Dienstag, 18. Oktober 2011 07:15
  • 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

    Dienstag, 18. Oktober 2011 09:11
  • 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
    Dienstag, 18. Oktober 2011 16:41
  • 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);
                }
    


     


    Mittwoch, 19. Oktober 2011 06:42
  • Hallo Hilko Schraivogel,

    Ich gehe davon aus, dass die Antworten Dir weitergeholfen haben.
    Solltest Du noch "Rückfragen" dazu haben, so gib uns bitte Bescheid.

    Grüße,
    Robert

    Dienstag, 8. November 2011 14:26
    Moderator