Visual c++ 开发Visual Studio通用项目-如何从for循环中的顺序命名文本框中提取文本

Visual c++ 开发Visual Studio通用项目-如何从for循环中的顺序命名文本框中提取文本,visual-c++,win-universal-app,Visual C++,Win Universal App,我对以下代码有一个问题,我认为这些代码会从表单上的顺序文本框中提取用户输入: #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 ze

我对以下代码有一个问题,我认为这些代码会从表单上的顺序文本框中提取用户输入:

#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
        }
}
#包括“pch.h”
#包括“MainPage.xaml.h”
#包括//用于std::cout和std::cin
#包括
#包括
{
int grid[9][9]={0};//用零填充的虚拟数组
//将数字放入数组
for(int row=0;row<9;++row)//逐步遍历所有行
for(int col=0;col<9;++col)//逐步遍历所有列
{
row=row+1;//文本框名称后缀为11到19
col-col+1;
std::string r_str=std::to_string(行);//将行号转换为文本
std::string c_str=std::to_string(col);//将列编号转换为文本
std::string texnum=“Tex”+r_str+c_str;//例如“Tex11”//编译文本框名称
String^str\u input=texnum->Text;//从文本框获取平台::字符串
std::wstring wsstr(str_input->Data());//将平台::字符串转换为字符串
int n=std::stoi(wsstr);//将字符串转换为整数
grid[row][col]=n;//将texbox中的文本作为数字放入数组中
}
}
在线 字符串^str\u input=texnum->Text

在texnum的TexBox标识符处,它给出了一个错误,即表达式必须具有指针或句柄类型。如果我用一个实际的文本框名称Tex11替换它,则不会有错误,但它只从一个框中提取文本。 我需要一种使用字符串变量而不是实际字符串从文本框中获取文本的方法。
任何帮助都将不胜感激。

您不能直接使用字符串来尝试获取文本属性,在这种情况下,它只是一个字符串而不是TextBox对象。因此,首先需要通过获取的名称字符串获取TextBox控件,然后通过TextBox获取Text属性

您可以尝试使用以下代码使用FindName方法获取TextBox对象,“MyPage”是TextBox的父视图(例如StackPanel)。此外,FindName方法需要传递平台::字符串^type,将std::wstring转换为平台::字符串^很容易,因此最好只使用std::wstring type而不是std::字符串

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);
    }
int grid[9][9]={0};//用零填充的虚拟数组
//将数字放入数组
for(int row=0;row<9;++row)//逐步遍历所有行
for(int col=0;col<9;++col)//逐步遍历所有列
{
row=row+1;//文本框名称后缀为11到19
col-col+1;
std::wstring r_str=std::to_wstring(行);//将行号转换为文本
std::wstring c_str=std::to_wstring(col);//将列编号转换为文本
std::wstring texnum=L“texnum”+r_str+c_str;
平台::字符串^aa=ref新平台::字符串(texnum.c_str());
TextBox^elment=(TextBox^)MyPage->FindName(ref new Platform::String(texnum.c_str());
字符串^str\u input=elment->Text;
std::wstring wsstr(str_input->Data());
int n=std::stoi(wsstr);
}
这是我的最终代码(StackPanel名为FirstLine)

void universal::MainPage::Solve_单击(平台::对象^sender,Windows::UI::Xaml::路由目标^e)
{
int grid[9][9]={0};//用零填充的虚拟数组
//将数字放入数组
for(int row=0;row<9;++row)//逐步遍历所有行
for(int col=0;col<9;++col)//逐步遍历所有列
{
row=row+1;//文本框名称后缀为11到19
col=col+1;
std::wstring r_str=std::to_wstring(行);//将行号转换为文本
std::wstring c_str=std::to_wstring(col);//将列编号转换为文本
std::wstring texnum=L“texnum”+r_str+c_str;
平台::字符串^aa=ref新平台::字符串(texnum.c_str());
TextBox^elment=(TextBox^)FirstLine->FindName(aa);
字符串^str\u input=elment->Text;
std::wstring wsstr(str_input->Data());
int n=std::stoi(wsstr);
}

^使它成为一个托管变量。更多信息见(我不明白,但这是老师说的)。这是一个C操作,而不是C++。C语言和C++是不同的语言,你也可能包括页眉“主页。那不是C++头。这不能编译。非常感谢。非常感谢。您的代码已经解决了我的问题。有两个拼写错误,所以如果其他人需要答案,我将发布我的最终代码。
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);

    }