0

我在 6 行中有 6 个文本框,总共 36 个。第一行,第一框称为 L1N1,第一行,第二框称为 L1N2 等。我想使用字符串为这些文本框动态分配值...这可以在 C# 中完成吗?例如

    private void Generate_Click(object sender, EventArgs e)
    {
        int[,] numbers = new int[6, 6];
        int lin = 0;
        while (lin < 6)
        {
            lin++;
            int num = 0;
            while (num < 6)
            {
                num++;
                Random random = new Random();
                int randomNum = random.Next(1, 45);
                "L" + lin + "N" + num /* <--here is my string (L1N1) i want to 
                                          set my textbox(L1N1).text to a value
                                          randomNum!*/
4

7 回答 7

2

当然,WebPage 为您提供了一个不错的 FindControl:

TextBox tx = FindControl("L" + lin + "N" + num) as TextBox;
于 2012-04-10T14:55:53.473 回答
0
List<TextBox> listOfTextBoxes = new List<TextBox>();
...initialization of list.... 
foreach(TextBox tb in listOfTextBoxes)
{
Random r = new Random();
tb.Text = r.Next(1,45).ToString();
}
于 2012-04-10T14:57:07.720 回答
0

您不能使用 FindControl API 并设置 .text 属性吗?

于 2012-04-10T14:58:48.157 回答
0
private void formMain_Load(object sender, EventArgs e)
{
     this.Controls.Find("Your Concatenated ID of control ex: L1N2", true);
}

或者

foreach(var cont in form.Controls)
{
     if(cont is TextBox) dosmth;
}
于 2012-04-10T15:00:46.967 回答
0

Form.Controls 有一个 FindByName 方法,因此您可以构建控件名称并使用它。虽然它并不聪明。

就我个人而言,我要么从 TextBox[6,6] 以编程方式创建控件,要么将它们的引用从 Form.Controls 推送到数组 [6,6] 中作为一次性的。

一旦你有了这个数组,你就可以找到它的各种用途。

于 2012-04-10T15:04:21.023 回答
0

如果是webform:(只需找出表单索引)

    protected void Generate_Click(object sender, EventArgs e)
    {
        foreach(Control item in Page.Controls[3].Controls)
        {
            if(item.GetType().ToString().ToLower().Contains("textbox"))
            {
                Random rnd = new Random();
                TextBox txt = (TextBox)item;
                System.Threading.Thread.Sleep(20);
                txt.Text = rnd.Next(1, 45).ToString();
            }
        }
    }
于 2012-04-10T15:02:20.073 回答
-1

我赞同 Jon Skeet 的观点。如果您希望能够通过某些行/列系统定位控件,最简单的方法是将控件本身放入一个集合中,以便以类似的方式对它们进行索引:

var textboxes = new TextBox[6][];
textboxes[0] = new TextBox[]{txtL1N1, txtL1N2, txtL1N3, txtL1N4, txtL1N5, txtL1N6};
//create the rest of the "lines" of TextBoxes similarly.

//now you can reference the TextBox at Line X, number Y like this:
textboxes[X-1][Y-1].Text = randomNum.ToString();

现在,如果您真的想通过某个字符串值访问这些文本框,您可以使用 Tag 属性,这是大多数控件的通用属性。您还可以根据某些系统命名所有文本框。然后,一点 Linq 就可以得到你想要的文本框:

this.Controls.OfType<TextBox>()
   .Single(t=>t.Tag.ToString() == "L1N1").Text = randomNum.ToString();

但是,理解这将非常缓慢;每次需要时,您都会搜索表单上存在的所有控件的完整集合。索引会快得多。

于 2012-04-10T15:00:04.893 回答