C#组合框列

C#组合框列,c#,combobox,C#,Combobox,假设我有以下文本文件: 100 Rogue common_mark_job_0018 101 Fighter common_mark_job_0019 102 Kahuna common_mark_job_0020 103 Spell Singer common_mark_job_0026 110 Champion common_mark_job_0022 111 Archer common_mark_job_0023 112 Druid common_mark_job_

假设我有以下文本文件:

100 Rogue   common_mark_job_0018
101 Fighter common_mark_job_0019
102 Kahuna  common_mark_job_0020
103 Spell Singer    common_mark_job_0026
110 Champion    common_mark_job_0022
111 Archer  common_mark_job_0023
112 Druid   common_mark_job_0024
113 Battle Kahuna   common_mark_job_0031
114 Evoker  common_mark_job_0032
120 Berserker   common_mark_job_0027
121 Marksman    common_mark_job_0029
122 Magus   common_mark_job_0028
123 War Kahuna  common_mark_job_0030
124 Beast Master    common_mark_job_ga_2summon01
200 Guide   common_mark_job_0033
201 Holy Warrior    common_mark_job_0002
202 Cleric  common_mark_job_0003
203 Breeder common_mark_job_0004
210 Knight  common_mark_job_0034
211 Soldier common_mark_job_0035
212 Bishop  common_mark_job_0006
213 Priest  common_mark_job_0007
214 Soul Breeder    common_mark_job_0009
220 Templar common_mark_job_0005
221 Mercenary   common_mark_job_de_2summon01
222 Cardinal    common_mark_job_0008
223 Oracle  common_mark_job_0037
224 Master Breeder  common_mark_job_0039
300 Stepper common_mark_job_0040
301 Strider common_mark_job_0010
302 Dark Magician   common_mark_job_0011
303 Sorcerer    common_mark_job_0012
310 Assassin    common_mark_job_0013
311 Shadow Hunter   common_mark_job_0014
312 Chaos Magician  common_mark_job_0015
313 Warlock common_mark_job_0016
314 Battle Summoner common_mark_job_0017
320 Slayer  common_mark_job_0041
321 Deadeye common_mark_job_0042
322 Void Mage   common_mark_job_0043
323 Corruptor   common_mark_job_0044
324 Overlord    common_mark_job_0045
我正在尝试将它(上面的文本)加载到我的ComboBoxEdit(应该与简单的ComboBox相同),我在Form1\u load或单击ComboBoxEdit时都这样做,它们都可以正常工作

  {

        if (comboBoxEdit2.Text != string.Empty)
        {

        }
        else
        {
            ComboBoxItemCollection coll = comboBoxEdit2.Properties.Items;
            coll.BeginUpdate();
            try
            {
                Assembly assembly = Assembly.LoadFile(Application.StartupPath + "/MyLists.dll");
                System.Resources.ResourceManager resourcemanager = new System.Resources.ResourceManager("ClassLibrary1.Properties.Resources", assembly);

                string[] strArrays15 = resourcemanager.GetString("JobList").Split('\n');

                for (int row = 0; row < strArrays15.Length; row++)
                {
                    columns = strArrays15[row].Split('\t');
                    //  comboBoxEdit2.Items.Add(columns[1]);
                    coll.Add(columns[1]);

                }
                return;
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.ToString());
            }
        }

它不起作用,PictureBox图像只显示最后一行图像(无论我从组合框中选择什么项目,最后一行的图像都会在所有情况下显示)。

代码中的变量
for
循环的每次迭代中当前仅保留一行。因此,每当
for
循环完全执行时,
columns
变量将只保存最后处理的行,这就是为什么您只获得最后一张图片。在代码中执行
for
循环后,
变量将保存此数据(对应于文件中的最后一行):

因此,每次调用
SelectedIndexChanged
事件处理程序时,
列[2]。ToString()
将始终返回
“common\u mark\u job\u 0045”
。您需要的是这样的数据结构,以便可以为每一行检索正确的图像(而不是像以前那样仅检索最后一行):

要使代码正常工作,应保存文件中每行的列,如下所示:

string[][] columns;

...

string[] strArrays15 = resourcemanager.GetString("JobList").Split('\n');
columns = new string[strArrays15.Length][];

for (int row = 0; row < strArrays15.Length; row++)
{
    columns[row] = strArrays15[row].Split('\t');
    //  comboBoxEdit2.Items.Add(columns[row][1]);
    coll.Add(columns[row][1]);
}

您好,谢谢您的回答,当我调试时,我在第277行遇到了一个问题,这意味着“coll.Add(columns[row][1]);”代码。到底是什么错误?您是否已将
变量类型更改为
字符串[]
?我不确定为什么第二行(在您发布的代码上)有两个[],因为它没有意义。除此之外,我将列声明为string[]列;在我的申请表上面是的。错误是这样的:Rappelz~~GM Tool.exe中发生了类型为“System.IndexOutOfRangeException”的未处理异常。其他信息:索引超出了数组的边界。请将列声明为
string[][]列
然后使用我发布的代码,它应该可以工作。我将编辑我的答案,解释为什么您应该使用
string[][]
而不是
string[]
。哦,现在它可以加载了,但是当我更改组合框上的项目时,图片未显示,我遇到以下错误:mscorlib.dll中发生“System.ArgumentException”类型的未处理异常。其他信息:路径中存在非法字符。
columns[0] = "324"
columns[1] = "Overlord"
columns[2] = "common_mark_job_0045"
// Columns of first row
columns[0][0] = "110"
columns[0][1] = "Champion"
columns[0][2] = "common_mark_job_0022"

// Columns of second row
columns[1][0] = "111"
columns[1][1] = "Archer"
columns[1][2] = "common_mark_job_0023"
string[][] columns;

...

string[] strArrays15 = resourcemanager.GetString("JobList").Split('\n');
columns = new string[strArrays15.Length][];

for (int row = 0; row < strArrays15.Length; row++)
{
    columns[row] = strArrays15[row].Split('\t');
    //  comboBoxEdit2.Items.Add(columns[row][1]);
    coll.Add(columns[row][1]);
}
private void comboBoxEdit2_SelectedIndexChanged(object sender, EventArgs e)
{
    pictureEdit3.Image = new Bitmap(Application.StartupPath + "/jpg/" +
                         columns[comboBoxEdit2.SelectedIndex][2].ToString() + ".jpg");
}