如何基于文本框创建数组表?
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, HorizontalValue];并且由于它是一个 int 数组,因此您的值分配必须是: theMatrixArray[tag[0], tag[1]] = int.Parse(tb.Text.Trim()); 我看过你的代码编辑,我担心你有点误解了带有矩阵的 foreach 循环应该是在你想从文本框中提取值到矩阵的方法中。矩阵(在本例中为 theMatrixArray)需要在 foreach 循环之前初始化。它将包含来自 TextBox 矩阵的值的矩阵。所以在 foreach 循环之前的某个地方你需要做: int[ , ] theMatrixArray = new int[verticalValue, HorizontalValue]; 嗨!我已经阅读了有关 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以上是关于如何基于文本框创建数组表?的主要内容,如果未能解决你的问题,请参考以下文章
如何创建将成为文本框、单选按钮或下拉输入的 Ember 组件;基于数据的类型?