如何为数组传输CheckListBox值?

时间:2016-01-28 16:33:45

标签: c++builder

我需要获取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]);
    }
}

1 个答案:

答案 0 :(得分:0)

您使用错误的索引访问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是明智的。