0

6行に6つのテキストボックスがあり、全部で36個あります。1行目、1行目はL1N1、1行目、2行目は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

確かに、Webページには優れたFindControlがあります。

TextBox tx = FindControl("L" + lin + "N" + num) as TextBox;
于 2012-04-10T14:55:53.473 に答える
0

Form.ControlsにはFindByNameメソッドがあるため、コントロール名を作成して使用できます。しかし、それは素晴らしいことではありません。

個人的には、TextBox [6,6]からプログラムでコントロールを作成するか、Form.Controlsから配列[6,6]へのコントロールへの参照を1回限りでプッシュロードします。

配列を取得したら、そのあらゆる種類の用途を見つけることができます。

于 2012-04-10T15:04:21.023 に答える
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

Webフォームの場合:(フォームインデックスを確認するだけです)

    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

ジョン・スキートの感情を反映しています。行/列システムでコントロールを見つけられるようにする場合、最も簡単な方法は、コントロール自体をコレクションに入れて、同様の方法でインデックスを作成できるようにすることです。

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 に答える