如何基于文本框创建数组表?

Posted

技术标签:

【中文标题】如何基于文本框创建数组表?【英文标题】:How to create table of array based on textboxes? 【发布时间】:2016-05-21 12:27:26 【问题描述】:

我有动态创建的 NxM 文本框。 用户用整数填充文本框。 我需要使用放入文本框的数据创建表 NxM。 我需要它来做矩阵计算。

我该怎么做?我可以为每个循环执行此操作吗?

我有这段代码,它给了我 NxM 文本框:

for (int i = 0; i <= verticalCount; i++) 
        

            if (i == verticalCount)
            
                for (int j = 0; j < horizontalValue; j++)
                
                    var xEnd = 100 + 80 * verticalCount; ;
                    var yEnd = 100 + 60 * j;
                    var textBoxNM = new TextBox();
                    textBoxNM.Name = string.Format("TextBox_0_1", i, j); 
                    textBoxNM.Location = new Point(xEnd, yEnd);
                    textBoxNM.Size = new System.Drawing.Size(50, 25);
                    Step2.Controls.Add(textBoxNM);

                    string end = string.Format("result = ", i + 1);
                    newLabel(end, xEnd - 60, yEnd, Step2);
                
            
            else
            
                for (int j = 0; j < horizontalValue; j++) //
                
                    var x = 20 + 80 * i;
                    var y = 100 + 60 * j;

                    if (j < horizontalValue)
                    
                        newTextbox(x, y, Step2);
                        string nbr = string.Format("x0", i + 1);
                        newLabel(nbr, x + 50, y, Step2);
                    
                
            
        

我有用 c++ 编写的代码,我正在尝试创建它的 windows 应用程序。

谢谢!

编辑:

public void button2_Click(object sender, EventArgs e)
    
        var verticalCount = Convert.ToInt32(comboBox1.Text);
        var horizontalValue = Convert.ToInt32(comboBox2.Text);

        int[,] tbArray;
        tbArray = new int[,]   horizontalValue , verticalCount  ;

        foreach (Control ShouldBeTextBox in this.Controls)
        
            if (ShouldBeTextBox is TextBox)
            
                if (ShouldBeTextBox != null)
                
                    int x = horizontalValue;
                    int y = verticalCount;
                    var tag = ShouldBeTextBox.Tag as int[];
                    string a = Convert.ToString(tag);
                    MessageBox.Show(a);
                    tbArray[tag[x], tag[y]] = Convert.ToInt32(ShouldBeTextBox.Text);
                
                else
                    MessageBox.Show("Fill all parameters");
            
        
    

【问题讨论】:

向我们展示您当前代码的相关部分。 感谢您对此感兴趣!我编辑了主题。 检查DataGridView control 这并不是完全可以帮助我的。我有用 c++ 编写的函数,它们对矩阵进行计算,我只想传输这些函数并将其用作 c# 中的方法。搜索枢轴列、乘以列等功能...而且我希望整个应用程序使用文本框、标签和按钮。 您可以使用DataGridView。您还可以使用 TableLayoutPanel 并将 TextBox 控件添加到表格布局面板。 【参考方案1】:

您可以做的是在创建文本框时给它们矩阵坐标作为标签。将 i 和 j 发送到您的 newTextbox 方法并执行类似的操作

theNewTextBox.Tag = new int[] i, j;

稍后当您需要将值放入矩阵数组时,您可以执行以下操作:

foreach(Control c in Step2.Controls)

   Textbox tb = c as TextBox;
   if (tb != null)
   
       var tag = tb.Tag as int[];
       theMatrixArray[tag[0], tag[1]] = tb.Text; // Or parse it to int if you can't have it in text
   

希望这会有所帮助。祝你好运!

【讨论】:

我确实像你写的那样,但是我在将字符串转换为 int 时遇到了问题,你能告诉我问题出在哪里吗?我编辑了主题,请检查。 现在它给出了错误“无法找到 var”,但是当我将 var 更改为 int 时,它给出了不同的错误“使用未分配的局部变量 theMatrixArray” 这只是示例...我假设您有一个二维数组来存储矩阵。任何数组或二维列表都可以。您只需要初始化一个,例如: int[ , ] theMatrixArray = new int[verticalValue, Horizo​​ntalValue];并且由于它是一个 int 数组,因此您的值分配必须是: theMatrixArray[tag[0], tag[1]] = int.Parse(tb.Text.Trim()); 我看过你的代码编辑,我担心你有点误解了带有矩阵的 foreach 循环应该是在你想从文本框中提取值到矩阵的方法中。矩阵(在本例中为 theMatrixArray)需要在 foreach 循环之前初始化。它将包含来自 TextBox 矩阵的值的矩阵。所以在 foreach 循环之前的某个地方你需要做: int[ , ] theMatrixArray = new int[verticalValue, Horizo​​ntalValue]; 嗨!我已经阅读了有关 foreach 循环的更多信息,并修改了我的代码。当它运行时,它似乎工作正常,但是当我关闭我的矩阵窗口表单时,它在tbArray[tag[x], tag[y]] = ... 行给了我异常“NullExcepction”。我不确定我是否正确,但标签值似乎是null。我究竟做错了什么?是否将价值从一种方法转移到另一种方法?【参考方案2】:

我真的建议您将 WPF 用于任何与 UI 相关的新内容,因为与 WinForms 相比,它简化了 UI 自定义。通过使用称为 DataTemplates 的东西,您可以告诉 WPF 如何将您的数据模型表示为 UI 元素。这意味着您可以让 WPF 根据需要创建尽可能多的文本框。您还可以通过称为绑定的机制接收每个数据模型实例的值更新。最后,称为 ItemsPanelTemplate 的机制允许您控制项目的布局。您可以将 Grid 用作 ListView 控件的面板模板。

【讨论】:

不幸的是,我需要在 c# 中完成,因为我的队友使用它。 WPF 支持 C#。它是一个 UI 框架,您可以使用它来代替 WinForms,将它与 C# 逻辑结合是本机支持的,因为 WPF 是使用 C# 实现的。 @Kasia 其余的不存在@Fabio

以上是关于如何基于文本框创建数组表?的主要内容,如果未能解决你的问题,请参考以下文章

如何创建一个通过文本框传递的大小的数组?

动态 Vuetify 文本框或基于数组值选择

文本框和标签数组如何在 C# 中的提交方法中获取值

如何创建将成为文本框、单选按钮或下拉输入的 Ember 组件;基于数据的类型?

如何在 Visual Basic 6.0 中创建带有文本框的数组

基于Excel工作表中的单元格颜色和文本颜色子集数据框