C#ComboBox列

时间:2016-01-02 20:36:06

标签: 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_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_Load或ComboBoxEdit On_click上做这个,它们都可以正常工作。

  {

        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());
            }
        }

正如你所看到的,我只是加载了第二个单元格,意思是“盗贼”,“战斗机”等等...... 现在在SelectedIndexChanged我这样做:

private void comboBoxEdit2_SelectedIndexChanged(object sender, EventArgs e)
    {
        pictureEdit3.Image = new Bitmap(Application.StartupPath + "/jpg/" + columns[2].ToString() + ".jpg");
    }

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

1 个答案:

答案 0 :(得分:1)

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

columns[0] = "324"
columns[1] = "Overlord"
columns[2] = "common_mark_job_0045"

因此,每次调用SelectedIndexChanged事件处理程序时,columns[2].ToString()将始终返回"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");
}