如何传输数组的 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