[英]Textbox values into int array
我的表格如下所示:
x, y, A,B,C
是矩陣。 權Texboxes x
被命名為x1,...,x6
,右texboxes A
被命名為
a11,...,a16
...
a61, ... ,a66
它們都是整數。 我想做的是,將此值放入數組中,例如:
x=(20,...,756);
然后將A轉換為2d數組,例如a[1][1]=932
... a[6][6]=666
。
如果是,怎么辦? 與組框? 我不知道如何解決此問題。 提前Thx
看到您的控件具有嵌入矩陣位置的名稱,我們可以編寫
這里沒有錯誤檢查,我假設數字始終是整數...
int[] xMatrix = new int[6];
int[,] aMatrix = new int[6,6];
foreach (Control control in this.Controls)
{
if (control is TextBox)
{
string pos = control.Name.SubString(1);
if(control.Name.StartsWith("a"))
{
int matrixPos = Convert.ToInt32(pos) ;
int x = (matrixPos / 10) - 1;
int y = (matrixPos % 10) - 1;
aMatrix[x,y] = Convert.ToInt32(control.Text);
}
else if(control.Name.StartsWith("x")
{
int arrayPos = Convert.ToInt32(pos) - 1;
xMatrix[arrayPos] = Convert.ToInt32(control.Text);
}
}
}
您可以執行類似的操作(假設您有一個包裝文本框的父控件)。 在我的情況下,它是一個id為“ pnlMain”的asp:Panel控件:
// Collection to hold your matrices
List<List<int>> myMatrices = new List<List<int>>();
// Iterate through all rows and columns
for (int i = 0; i <= 60; i = i + 10)
{
var matrix = new List<int>();
for (int j = 1; j <= 6; j++)
{
// Dynamically search parent control for child textboxes
var txt = pnlMain.FindControl(string.Format("{0}{1}", i == 0 ? "x" : "a", i + j)) as TextBox;
if (txt != null)
{
int value = 0;
int.TryParse(int.Parse(txt), out value);
matrix.Add(value);
}
}
myMatrices.Add(matrix);
}
可以使用編程方式添加文本框,同時將它們存儲在矩陣中,而不是使用設計器將文本框手動放置在表單上。
const int N = 6;
TextBox[,] _matrixATextBoxes = new TextBox[N, N];
public MyForm() // Form Constructor.
{
InitializeComponent();
SuspendLayout();
int x = 50; // Horizontal position of first TextBox.
for (int ix = 0; ix < N; ix++) {
int y = 80; // Vertical position of first TextBox.
for (int iy = 0; iy < N; iy++) {
var tb = new TextBox();
tb.Location = new Point(x, y);
tb.Size = new Size(23, 40);
_matrixATextBoxes[ix, iy] = tb;
Controls.Add(tb);
y += 30; // Vertical distance
}
x += 50; // Horizontal distance
}
ResumeLayout();
}
現在,您可以輕松閱讀內容
int a[,] = new int[N, N];
for (int ix = 0; ix < N; ix++) {
for (int iy = 0; iy < N; iy++) {
int value;
Int32.TryParse(matrixATextBoxes[ix, iy].Text, out value);
a[ix, iy] = value;
}
}
(未經測試。)
由於具有固定的文本框(即,不是動態創建它們),因此可以轉到表單定義,並為Tag屬性提供一個值。
從表格的左側開始,它看起來像這樣:
x.1 x.2 x.3 x.4 x.5 x.6
1.1 1.2 1.3 1.4 1.5 1.6
2.1 2.2 2.3 2.4 2.5 2.6
...
然后,您將遍歷所有檢索它的文本框,例如:
string textboxMatrix;
int textboxValue;
foreach (Control control in this.Controls)
{
if (control is TextBox)
{
textboxMatrix = ((TextBox)control).Tag.ToString();
textboxValue = Convert.ToInt32(((TextBox)control).Text);
if (textboxMatrix.StartsWith("x"))
{
int xPosition = Convert.ToInt32(textboxMatrix.Split('.')[1]);
x[xPosition] = textboxValue;
}
else
{
int aX = Convert.ToInt32(textboxMatrix.Split('.')[0]);
int aY = Convert.ToInt32(textboxMatrix.Split('.')[1]);
A[aX, aY] = textboxValue;
}
}
}
或 ,名稱(如您所說):
string textboxMatrix;
int textboxValue;
foreach (Control control in this.Controls)
{
if (control is TextBox)
{
textboxMatrix = ((TextBox)control).Name;
textboxValue = Convert.ToInt32(((TextBox)control).Text);
if (textboxMatrix.StartsWith("x"))
{
int xPosition = Convert.ToInt32(textboxMatrix.ToCharArray()[1]);
x[xPosition] = textboxValue;
}
else
{
int aX = Convert.ToInt32(textboxMatrix.ToCharArray()[1]);
int aY = Convert.ToInt32(textboxMatrix.ToCharArray()[2]);
A[aX, aY] = textboxValue;
}
}
}
您不僅可以手動創建陣列嗎?
int[] X = new int[] {x1.Value,x2.Value,x3.Value,x4.Value,x5.Value,x6.Value };
int[,] A = new int{ {a11.Value, a12.Value, a13.Value, a14.Value, a15.Value, a16.Value },
{a21.Value, a22.Value, a23.Value, a24.Value, a25.Value, a26.Value },
{a31.Value, a32.Value, a33.Value, a34.Value, a35.Value, a36.Value },
{a41.Value, a42.Value, a43.Value, a44.Value, a45.Value, a46.Value },
{a51.Value, a52.Value, a53.Value, a54.Value, a55.Value, a56.Value },
{a61.Value, a62.Value, a63.Value, a64.Value, a65.Value, a66.Value } };
盡管它沒有實現任何巧妙的技巧,但它卻非常容易,快捷。 而且由於文本框的數量一旦開始使用就不太可能改變,因此像這樣進行硬編碼應該沒有問題。
另外,應該使用正方形數組[,]而不是鋸齒狀數組[] [],因為鋸齒狀數組在每一行上的長度可能不同,這在矩陣中是不希望的,並且將其聲明為正方形會更清楚。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.