Как проверить все флажки в форме приложения программно? - PullRequest
4 голосов
/ 16 декабря 2011

Я хочу установить все флажки, когда нажимаю на кнопку.Весь объект находится в виде приложения Visual Studio 2010 C ++.Проблема в том, что каждый объект (флажок) имеет различное имя, CheckBox1, CheckBox2, ... Я создаю UnicodeString со значением "CheckBox" и значением int, которые начинаются с 1, и собираю его в третью переменную, чтобы найти объект,и это работает, но не знаю, как проверить все эти поля, пожалуйста, помогите.

Windows 7, 64, Visual studio 2010 (c ++) или c ++ builder 2010

Ответы [ 3 ]

2 голосов
/ 05 января 2012

Я сделал что-то похожее для другого компонента, именно так я и использовал C ++ Builder.

for (int i = 0; i < this->ComponentCount; i++)
{
 TCheckBox *TempCheckBox = dynamic_cast<TCheckBox *>(this->Components[i]);
 if (TempCheckBox)
 {
   TempCheckBox->Checked = true;
 }
}

Это будет повторять все компоненты в вашей форме, если компонент TCheckBox будет проверен.

1 голос
/ 16 декабря 2011

В C ++ Builder вы можете поместить все ваши TCheckBox* указатели в массив или std::vector, которые затем можно при необходимости перебрать, например:

TCheckBox* cb[10];

__fastcall TForm1::TForm1(TComponent *Owner)
    : TForm(Owner)
{
    cb[0] = CheckBox1;
    cb[1] = CheckBox2;
    ...
    cb[9] = CheckBox10;
}

void __fastcall TForm1::Button1Click(TObject *Sender)
{
    for (int i = 0; i < 10; ++i)
        cb[i]->Checked = true;
}

Если у вас много флажков и вы не хотите заполнять весь массив вручную, вы можете использовать вместо этого цикл:

__fastcall TForm1::TForm1(TComponent *Owner)
    : TForm(Owner)
{
    for (int i = 0; i < 10; ++i)
        cb[i] = (TCheckBox*) FindComponent("CheckBox" + IntToStr(i+1));
}
1 голос
/ 16 декабря 2011

Почему вы не добавляете все в вектор, содержащий флажки, а затем просматриваете их все, когда это необходимо? Это позволит вам ссылаться на каждый флажок в отдельности, но все сразу.

     cliext::vector<System::Windows::Forms::CheckBox^> items;
     items.push_back(checkbox1);
     .
     .
     .
     items.push_back(checkboxN);

Важно, чтобы вы также включили

#include <cliext/vector>

из-за того, что вектор нормали в стандартной библиотеке в настоящее время не может поддерживать этот элемент управления.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...