如何传输数组的 CheckListBox 值?
How to transfer CheckListBox values for an array?
我需要获取 CheckListBox 的值并传输数组。当我 select CheckListBox 中的选项按顺序排列时,例如 (01, 02, 03) 结果是正确的,但如果我 select 乱序,例如 (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]);
}
}
您正在使用错误的索引访问 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
。
我需要获取 CheckListBox 的值并传输数组。当我 select CheckListBox 中的选项按顺序排列时,例如 (01, 02, 03) 结果是正确的,但如果我 select 乱序,例如 (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]);
}
}
您正在使用错误的索引访问 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
。