【问题标题】:Matching enum with combo box list doesn't seem to work将枚举与组合框列表匹配似乎不起作用
【发布时间】:2017-02-16 11:26:40
【问题描述】:

[更新:添加Form1()构造函数]

我正在尝试将某些类别中的一些数据匹配到 Windows 窗体应用程序中的组合框值中。

到目前为止我所做的看起来像这样:

(这个类有一些 region[] 值,我想存储在组合框中,具体取决于 enum Project

public Form1()
{
    formatWorker.DoWork += worker_DoWork;
    formatWorker.RunWorkerCompleted += worker_RunWorkerCompleted;

    extractWorker.DoWork += extractWorker_DoWork;
    extractWorker.ProgressChanged += extractWorker_ProgressChanged;
    extractWorker.RunWorkerCompleted += extractWorker_RunWorkerCompleted;

    InitializeComponent();
    projectBox.DataSource = Constant.projects.ToString(); 
    projectBox.SelectedIndex = (int)Regions.Project.NBTevo;
    PopulateUsbDevices();
}

class Regions
{
    public enum Project
    {
        NBT = 0,
        NBTevo = 1,
        MGU = 2
    }

    string[] regions = { "ARG", "AUSNZ", "ECE", "IND", "ISR", "LA", "ME", "NA", "NAF", "NANT", "PAL", "SEA", "TC", "ZA" };

    public string[] GetRegionsForProject(Project proj)
    {
        //all directories from /Databases/proj[i]
        string[] allDirectories = Constant.ExtractFileNames(Directory.GetDirectories(Constant.path + "//" + Constant.projects[(int)proj]));


        string[] availableSubDirectories = Enumerable.Intersect(allDirectories, regions).ToArray();

        return availableSubDirectories;
    }
}

下一个类存放一定的模式文件

class DBVersion
{        
    public string[] GetVersion(string proj, string region)
    {
        string pattern = "^" + proj + "_" + region + "_" + @"(\d+\.\d+\.\d+_[a-zA-Z0-9_]+)\.iso$";
        string[] files = Directory.GetFiles(Constant.path + "\\" + proj + "\\" + region + "\\images\\", "*.iso", SearchOption.AllDirectories);
        return files;

    }
}

我正在尝试构建一个依赖项,例如,根据projectBoxregionBox 中的选定值,某些版本会出现在versionBox

private void projectBox_SelectedIndexChanged(object sender, EventArgs e)
{
    isoPaths.Clear();
    populateRegions((Regions.Project)Enum.Parse(typeof(Regions.Project), projectBox.SelectedValue.ToString()));
    regionBox.SelectedIndex = 0;
    regionBox_SelectedIndexChanged(null, null);
}

private void regionBox_SelectedIndexChanged(object sender, EventArgs e)
{
    string[] versionPaths = version.GetVersion(projectBox.SelectedValue.ToString(), regionBox.SelectedItem.ToString());

    isoPaths.Clear();
    isoPaths.AddRange(versionPaths);

    populateVersions(Constant.ExtractFileNames(versionPaths));
    //versionBox.SelectedIndex = 0;
    //versionBox_SelectedIndexChanged(null, null);
}

private void versionBox_SelectedIndexChanged(object sender, EventArgs e)
{

}
private void populateRegions(Regions.Project proj) 
{ 

    this.regionBox.DataSource = region.GetRegionsForProject(proj); 
} 

private void populateVersions(string[] versions) 
{ 
    this.versionBox.DataSource = version.GetVersion(
                    projectBox.SelectedItem.ToString(),
                    region‌​Box.SelectedItem.ToS‌​tring()); 
} 

运行后,ComboBox中没有存储任何东西

【问题讨论】:

  • 我没有看到您填充组合框或绑定 DataSource 的任何代码。可能是我的眼睛太累了。
  • 你是对的。这是我不知道该怎么做的事情,抱歉不清楚
  • 我有两种方法:private void populateRegions(Regions.Project proj) { this.regionBox.DataSource = region.GetRegionsForProject(proj); } private void populateVersions(string[] versions) { this.versionBox.DataSource = version.GetVersion(projectBox.SelectedItem.ToString(),regionBox.SelectedItem.ToString()); } 但我似乎无法将它们放在一起
  • 如果将它们绑定为数据源,它实际上应该可以工作,您需要在调试器中检查方法返回的内容。 string[] 似乎是空的。否则你应该在ComboBoxes 中看到一些东西。您是否尝试在regionBox_SelectedIndexChanged 事件中绑定this.versionBox.DataSource = versionPathsGetVersionConstant.ExtractFileNames 返回什么值。此外,您在populateVersions 方法中没有使用参数versions,为什么?
  • 我知道我仍然是个菜鸟,但仍然不适合我。请问我该怎么办

标签: c# .net combobox enums


【解决方案1】:

如果您想将DataSource 绑定到ComboBox,您应该使用:

实现 IList 接口或数组的对象

根据ComboBox.DataSource Property documentation

所以Form1的构造函数中的这一行:

projectBox.DataSource = Constant.projects.ToString();

必须改成这样:

projectBox.DataSource = Constant.projects;

其余的组合框是空的,因为问题从一个到下一个级联。如果一个是空的,那么其余的就不能适当地填充

【讨论】:

    猜你喜欢
    • 2019-10-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-12-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多