2017-02-16 54 views
0

[更新:新增Form1()構造]與組合框列表匹配枚舉似乎並沒有工作

我試圖在Windows窗體應用程序匹配來自某些clases一些數據組合框的值。

我做了什麼到現在爲止是這樣的:

(這個類有一些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

+0

我沒有看到任何代碼在哪裏填充組合框或綁定它的'DataSource'。可能是我的眼睛太累了。 –

+0

你是對的。這是我不知道該怎麼做的事,對不起,我不清楚 –

+0

我有兩種方法: 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()); } '但我似乎無法將它們放在一起 –

回答

1

什麼,如果你想綁定DataSourceComboBox你應該使用:

實現IList接口或對象的對象

根據ComboBox.DataSource Property documentation

所以這一行的Form1構造:

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

要改變成這樣:

projectBox.DataSource = Constant.projects; 

的組合框的其餘部分是空的,因爲問題級聯從一個到下一個。如果其中一個是空的,那麼其餘部分不能被適當地填充