Разработка Visual Studio Universal Project - Как извлечь текст из последовательных именованных TextBoxes в цикл for - PullRequest
0 голосов
/ 10 ноября 2019

У меня проблема со следующим кодом, который, как я думал, извлечет пользовательский ввод из последовательных текстовых полей формы:

#include "pch.h"
#include "MainPage.xaml.h"
#include <iostream>  // for std::cout and std::cin
#include <sstream>
#include <string>
{
    int grid[9][9] = { 0 }; // virtual array filled with zeros
        //put numbers in array
    for (int row = 0; row < 9; ++row)//step through all rows
        for (int col = 0; col < 9; ++col) //step through all columns
        {
            row = row + 1; // text box names suffixes are 11 to 19
            col - col + 1;
                std::string r_str = std::to_string(row);// turn row number into text
            std::string c_str = std::to_string(col);//turn column nuber into text
            std::string texnum = "Tex" + r_str + c_str;// eg "Tex11" //compile textbox name
            String^ str_input = texnum->Text; //get Platform::String from textBox
            std::wstring wsstr(str_input->Data());//Convert Platform::String to String
            int n = std::stoi(wsstr);//Convert String to Integer
            grid[row][col] = n; //put text from texbox in array as a number
        }
}

В строке String ^ str_input = texnum-> Text;

В TexBox Identifier texnum выдает ошибку, выражение должно иметь указатель или дескриптор типа. Если я заменю его на фактическое имя Textbox Tex11, ошибки не будет, но тогда он будет извлекать текст только из одного поля. Мне нужен способ получить текст из TextBox, используя строковую переменную вместо фактической строки. Любая помощь будет оценена.

Ответы [ 2 ]

0 голосов
/ 11 ноября 2019

Вот мой окончательный код (StackPanel называется FirstLine)

void universal::MainPage::Solve_Click(Platform::Object^ sender, Windows::UI::Xaml::RoutedEventArgs^ e)
{
int grid[9][9] = { 0 }; // virtual array filled with zeros
//put numbers in array
for (int row = 0; row < 9; ++row)//step through all rows
    for (int col = 0; col < 9; ++col) //step through all columns
    {
        row = row + 1; // text box names suffixes are 11 to 19
        col = col + 1;

        std::wstring r_str = std::to_wstring(row);// turn row number into text
        std::wstring c_str = std::to_wstring(col);//turn column nuber into text
        std::wstring texnum = L"texnum" + r_str + c_str;
        Platform::String^ aa = ref new Platform::String(texnum.c_str());
        TextBox^ elment = (TextBox^)FirstLine->FindName(aa);
        String^ str_input = elment->Text;
        std::wstring wsstr(str_input->Data());
        int n = std::stoi(wsstr);

    }
0 голосов
/ 11 ноября 2019

Вы не можете напрямую использовать строку, чтобы попытаться получить свойство Text, в этом случае это только строка вместо объекта TextBox. Поэтому вам нужно сначала получить элемент управления TextBox по полученной вами строке имени, а затем получить свойство Text с помощью TextBox.

Вы можете попробовать следующий код, чтобы использовать метод FindName для получения объекта TextBox, «MyPage» является родительским представлением TextBox (например, StackPanel). Кроме того, метод FindName должен быть передан типом PlatForm :: String ^, легко преобразовать std :: wstring в PlatForm :: String ^, поэтому лучше использовать только тип std :: wstring вместо std :: string.

int grid[9][9] = { 0 }; // virtual array filled with zeros
//put numbers in array
for (int row = 0; row < 9; ++row)//step through all rows
    for (int col = 0; col < 9; ++col) //step through all columns
    {
        row = row + 1; // text box names suffixes are 11 to 19
        col - col + 1;

        std::wstring r_str = std::to_wstring(row);// turn row number into text
        std::wstring c_str = std::to_wstring(col);//turn column nuber into text
        std::wstring texnum = L"texnum" + r_str + c_str;
        Platform::String^ aa = ref new Platform::String(texnum.c_str());
        TextBox^ elment = (TextBox ^)MyPage->FindName(ref new Platform::String(texnum.c_str()));
        String^ str_input = elment->Text;
        std::wstring wsstr(str_input->Data());
        int n = std::stoi(wsstr);
    }
...