【发布时间】: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;
}
}
我正在尝试构建一个依赖项,例如,根据projectBox 和regionBox 中的选定值,某些版本会出现在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(),
regionBox.SelectedItem.ToString());
}
运行后,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 = versionPaths。GetVersion和Constant.ExtractFileNames返回什么值。此外,您在populateVersions方法中没有使用参数versions,为什么? -
我知道我仍然是个菜鸟,但仍然不适合我。请问我该怎么办