Есть ли способ перебрать значения текстового поля в C ++? - PullRequest
0 голосов
/ 18 декабря 2018

У меня есть 50 текстовых полей, из которых я хочу получить текст.Я хочу пройтись по этим текстам вместо того, чтобы получать каждый текст по отдельности.

То, что у меня сейчас есть

получение значений:

array <System::String ^, 49> s;
s[0]=this->TextBox0->Text;
s[1]=this->TextBox1->Text;
...
s[49]=this->TextBox49->Text;
//do stuff with s

Что я ищу

array <System::String ^, 49> s;
for (int i = 0; i <= 49; i++)
{
    s[i]=this->TextBox[i]->Text;
}
// do stuff with s

Я не уверен, как перебирать текстовые поля.

1 Ответ

0 голосов
/ 18 декабря 2018

На основании предоставленного кода здесь ;Разумно предположить, что textbox1 и т. Д. Ссылаются на некоторое большое количество идентично типизированных объектов в пользовательском подклассе «form».Лучшее решение будет включать следующее:

private std::array<TextBox> TextBoxes(49);

В противном случае, если объекты могут быть просто на одинаковом расстоянии друг от друга в памяти, может также работать следующий обходной путь.

Следующий код НЕ ДОЛЖЕН использоваться в профессиональной кодовой базе

В дополнение к проблеме, основанной на согласованном расположении блоков в памяти, это решение также рискует писать и читать из недопустимых областей памяти, поскольку нет гарантированных границ, как в случае со стандартным массивом.

size_t stepSize = static_cast<char*>(&(this->TextBox1)) - static_cast<char*>(&(this->TextBox0));

s[i] = (static_cast<TextBox*>(static_cast<char*>(&(this->TextBox0) + stepSize * i)))->Text;

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

...