我需要获取一个CheckListBox的值,并为一个数组进行传输。当我按顺序从CheckListBox中选择选项时,例如(01、02、03),结果是正确的,但是如果我选择无序,例如(04、05、06),数组不会得到值,数组值为0。
我的代码:
__fastcall TForm1::TForm1(TComponent* Owner)
: TForm(Owner)
{
CheckListBox1->Items->Add("01");
CheckListBox1->Items->Add("02");
CheckListBox1->Items->Add("03");
CheckListBox1->Items->Add("04");
CheckListBox1->Items->Add("05");
CheckListBox1->Items->Add("06");
CheckListBox1->Items->Add("07");
}
void __fastcall TForm1::Button1Click(TObject *Sender)
{
float array[3];
int optionChecked=0;
for(int i=0; i<CheckListBox1->Count;i++) {
if(CheckListBox1->Checked[i] == true) {
array[i]= StrToFloat(CheckListBox1->Items->Strings[i]);
optionChecked++;
}
}
for(int i=0;i<optionChecked;i++) {
ShowMessage(array[i]);
}
}发布于 2016-01-28 16:43:57
您正在使用错误的索引访问array。您使用i,但意味着使用optionChecked。由于数组太短,您也有访问超出界限的风险。我会修改代码如下:
float array[7];
int optionChecked=0;
for(int i=0; i<CheckListBox1->Count;i++) {
if(CheckListBox1->Checked[i] == true) {
array[optionChecked]= StrToFloat(CheckListBox1->Items->Strings[i]);
optionChecked++;
}
}明智的做法是添加一些防御代码,以断言array的长度等于CheckListBox1->Count。
https://stackoverflow.com/questions/35066904
复制相似问题