因此,我们有一种方法来动态创建一个由y个texbox组成的x数组,以将值输入到其中,以便稍后进行一些矩阵计算,例如确定矩阵的等级。
要生成数组,请使用以下代码:
protected void Form2_Load(object sender, EventArgs e)
{
for (int row = 0; row < LinhaText; row++)
{
List<TextBox> newLin = new List<TextBox>();
textboxes.Add(newLin);
for (int col = 0; col < ColunText; col++)
{
TextBox newbox = new TextBox();
newbox.Width = textboxWidth;
newbox.Height = textboxHeight;
newbox.Top = (row * (textboxHeight + spacing)) + spacing + vOffset;
newbox.Left = (col * (textboxWidth + spacing)) + spacing + hOffset;
newLin.Add(newbox);
this.Controls.Add(newbox);
}
}
}
这是第二种形式,因为在第一种形式中,我们输入了数组的维数。当我们在文本框中输入值时,它们应该被发送到第三种形式以供其他计算使用。 我们想知道如何获取这些值并将其发送到其他表单,以便稍后显示结果。 您需要任何其他信息,只需询问!
答案 0 :(得分:1)
我假设这些不是模式窗口,并且用户可以随时在它们之间切换?如果是这种情况,那么我建议您使用MVC或MVVM之类的设计模式,分离数据,视图和控制逻辑。通过使数据层与视图区分开,可以使所有窗口(视图)共享相同的基础数据。当然,您将需要使用事件来通知各个窗口何时更改数据(请参见INotifyPropertyChanged接口)。
答案 1 :(得分:1)
我不会绕过文本框,而是将数字存储在二维数组(矩阵)中。另外,我将使用绑定将矩阵值自动绑定到文本框。要使绑定生效,您需要一个包含您的值的辅助类,因为绑定需要绑定到属性。
private class Data // Can be a nested private class in Form2.
{
public double Value { get; set; }
public override string ToString() => Value.ToString(); // Not strictly necessary, but
// makes debugging easier.
}
我们创建一个_matrix
字段以及将这个Data[,]
矩阵转换为double[,]
矩阵并返回(在Form2
中)的属性:
private Data[,] _matrix;
public double[,] Matrix
{
get {
var m = new double[LinhaText, ColunText];
for (int row = 0; row < LinhaText; row++) {
for (int col = 0; col < ColunText; col++) {
m[row, col] = _matrix[row, col].Value;
}
}
return m;
}
}
现在创建文本框并将其绑定到Data
对象(在Form2_Load
或InitializeComponent
之后的表单构造函数中):
_matrix = new Data[LinhaText, ColunText];
for (int row = 0; row < LinhaText; row++) {
for (int col = 0; col < ColunText; col++) {
var newbox = new TextBox {
Width = textboxWidth,
Height = textboxHeight,
Top = (row * (textboxHeight + spacing)) + spacing + vOffset,
Left = (col * (textboxWidth + spacing)) + spacing + hOffset
};
// Create Data object, add it to the matrix and bind it to the TextBox.
var data = new Data();
_matrix[row, col] = data;
newbox.DataBindings.Add(new Binding("Text", data, "Value", true));
Controls.Add(newbox);
}
}
请注意,绑定有两种方式。如果使用数字初始化矩阵,则在打开表单时它们将显示在文本框中。在文本框中输入的数字将存储在矩阵中。
现在,在另一种形式上,您需要引用该形式。然后您可以使用
double[,] matrix = frmMartixInput.Matrix;
如果您在传递表单引用时遇到困难,请在静态类中为矩阵使用静态属性,该属性可以被所有表单引用。
public static class Globals
{
public static double[,] Matrix { get; set; }
}
您还可以通过构造函数参数(对其他表单的引用或矩阵本身)将数据传递给表单。