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