【问题标题】:How to get drives( 'C' or 'E' or 'F' )available in a system?如何获得系统中可用的驱动器(“C”或“E”或“F”)?
【发布时间】:2014-10-14 06:51:24
【问题描述】:

我正在开发一个引导程序应用程序。当我们移动到安装位置选择向导时,我们可以有一个浏览选项来更改我们的安装位置。

当我们为该浏览选项计时时,我只需要显示系统中可用的驱动器(“C”、“D”和“F”)。当我们选择驱动器时,它不会展开。我需要在安装向导的安装位置文本中单独使用该驱动器(例如:C:)。

谁能指导我如何实现我的要求?

我的代码:

private void btn_Browse_Click(object sender, EventArgs e)
{
  txt_InstallLocation.Focus();
  FBD_Source.RootFolder = Environment.SpecialFolder.Desktop;

  if (FBD_Source.ShowDialog() == DialogResult.OK)
  {
    txt_InstallLocation.TextBox.Text = FBD_Source.SelectedPath;
    BA.Model.Bootstrapper.Engine.StringVariables["APPDIR"] = FBD_Source.SelectedPath + "\\";
  }
}

我需要修改下面这行代码。

FBD_Source.RootFolder = Environment.SpecialFolder.Desktop;

任何人都可以帮助我继续前进或指导我走上正确的道路吗?

【问题讨论】:

标签: c#-4.0 wix bootstrapper wix3.7


【解决方案1】:

您可以像这样找到可用的驱动器。

var drives = System.Environment.GetLogicalDrives();
foreach (string d in drives)
       Console.WriteLine(d);

不要使用 FolderBrowserDialog。
使用动态创建的单选按钮/列表创建一个表单,并让用户选择其中一个选项

类似的东西

        var drives = System.Environment.GetLogicalDrives();

        Form selectionForm = new Form() { MaximizeBox = false, FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedDialog, StartPosition = FormStartPosition.CenterScreen };


        ListBox lb = new ListBox() { Dock = DockStyle.Fill };
        foreach (var item in drives)
            lb.Items.Add(item);
        selectionForm.Controls.Add(lb);

        Button btnOk = new Button() { Dock = DockStyle.Left, Width = selectionForm.Width / 2 };
        btnOk.Text = "OK";
        Button btnCancel = new Button() { Dock = DockStyle.Right, Width = selectionForm.Width / 2 };
        btnCancel.Text = "Cancel";


        Panel bottomPanel = new Panel() { Dock = DockStyle.Bottom, Height = 50 };

        bottomPanel.Controls.Add(btnOk);
        bottomPanel.Controls.Add(btnCancel);
        selectionForm.Controls.Add(bottomPanel);
        selectionForm.ShowDialog();
        MessageBox.Show(lb.SelectedItem.ToString());

【讨论】:

  • 我可以使用 Treegrid 代替列表框吗?我也可以在每个驱动器号之前显示驱动程序图像吗?
  • 您能否建议我一些对了解更多有关 WindowsForms 有用的链接?因为我想在 Windows 窗体中做所有这些事情。
  • stackoverflow.com/questions/6361376/… 如果只有驱动器列表,为什么还要使用树?
  • 我的要求是创建一个像文件夹浏览器对话框一样的表单。所以我想使用treegrid。由于“Dock = DockStyle.Fill”,列表框设置为完整形式。但它不应该像我的要求那样(根据文件夹浏览器对话框)。因为我需要在表单的列表框下有 2 个按钮。你能帮忙吗?
  • 检查我更新的答案。如果对您来说更容易,您可以使用 Visual Studio 设计器创建表单。我想我不能再帮你了
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-04-28
  • 2023-03-19
  • 1970-01-01
  • 2022-06-29
  • 1970-01-01
相关资源
最近更新 更多