TextBox动态生成,生成时的ID结尾用随机数,比如textbox13

解决方案 »

  1.   

    textbox.ID = "textbox" + i.tostring();
    i为1~81的随机数
    赋值时就可以给固定的9个Textbox赋值就可以了
      

  2.   

    每次页面加载的时候要给不同的9个textbox赋值的话怎么做啊
      

  3.   

    首先
    把你的81个textbox放一个容器内
    比如一个panel 最好不要有其它的控件在里面 有的话判断一下
    初始化的时候
    Random myRandom = new Random();
    foreach (Control control in panel.Controls[])
    {
        if (control is TextBox) // 这里接上面的话:有其他控件需要先判断一下
        {
            TextBox myBox = control as TextBox;
            myBox.Text = myRandom.Next(1, 10);
        }
    }
    这样81个textbox都会有值
    每一个的值是随机的
    也不用考虑textbox的ID
      

  4.   

    对不起,上面那个[]去掉如果是给9个不同textbox赋
    那得这样Random myRandom = new Random();List<TextBox> myList = new List<TextBox>();
    myList.AddRange(panel.Controls);for (int i = 0; i < 9; i++)
    {
        int j = myRandom.Next(0, myList.Count);
        myList[j].Text = i + 1;
        myList.RemoveAt(j);
    }Remove的目的是为了不取到同一个TextBoxThat's all!
      

  5.   

    我上面这个方法就是
    随机抽9个不同的textbox
    分别赋1-9这9个数
    不知道是不是符合你的需求
    如果是20个
    你把for里面的i改了就是了啊
      

  6.   

    myList.AddRange(panel.Controls);
    这个什么意思啊!是加入范围吗?
      

  7.   

    是的
    加入一个collection
    panel.Controls 就是一个collection
    这样不用遍历一个一个加
      

  8.   

    对 就是的 叫什么数独游戏的  还有我还想页面加载的时候textbox是不可见的,只有当鼠标点击的时候才显示出来 怎么做啊
    谢谢
      

  9.   

    List<TextBox> myList = new List<TextBox>();这句编译不过
      

  10.   

    如果不是 2.0 就换成 ArrayList 吧
    下面再有点小改动 先前有点 BUGRandom myRandom = new Random();ArrayList myList = new ArrayList();
    myList.AddRange(panel.Controls);for (int i = 0; i < 9; i++)
    {
        int j = myRandom.Next(0, myList.Count);
        (myList[j] as TextBox).Text = (i + 1).ToString();
        myList.RemoveAt(j);
    }
      

  11.   

    if(!Page.IsPostBack)
     {
     Random myRandom = new Random();  ArrayList myList = new ArrayList();
     myList.AddRange(Panel1.Controls);  for (int i = 0; i < 9; i++)
     {
     int j = myRandom.Next(0, 81);
     if(myList[j] is TextBox)
     {
     (myList[j] as TextBox).Text = (i + 1).ToString();
     myList.RemoveAt(j);}
     }这个可以编译
    但每次取出来的值不一样啊
      

  12.   

    哪里的值需要不一样
    我实现的是随机取9个textbox
    分别给1-9的值
      

  13.   

    你试一下这个思路:把81个textbox的id给成text1,text2,……,text81,然后用随机数生成1到81里一个数,然后用(textbox)findcontrol("text"+你的随机数)来得到81个textbox里的某个,然后把1到9之间的随机值给那个textbox应该就可以了。
      

  14.   

    还是有的时候8个,有的时候九个
    代码 Random myRandom = new Random(); for (int i = 0; i < 9; i++)
    {
    int j = myRandom.Next(1, 81);

    ((TextBox)(Panel1.FindControl("TextBox"+j.ToString()))).Text=myRandom.Next(1,9).ToString();
    }
      

  15.   

    不会吧 一会儿5个一会儿又7个?
    你的容器里是不是有其它本不属于这81个集合里的textbox啊
      

  16.   

    完善判断
    这样
    再不行我就去跳……Random myRandom = new Random();ArrayList myList = new ArrayList();
    foreach (Control control in panel.Controls)
    {
        if (control is TextBox)
        {
            myList.Add(control);
        }
    }for (int i = 0; i < 9; i++)
    {
        int j = myRandom.Next(0, myList.Count);
        (myList[j] as TextBox).Text = (i + 1).ToString();
        myList.RemoveAt(j);
    }
      

  17.   

    myList.RemoveAt(j)
    这个函数是做什么的 啊 高手
      

  18.   

    我每次取一次 都把myList里移出一个control
    这是为了保证下次循环过来不取到同一个textbox
    比如一来list里有5个textbox tb1 tb2 tb3 tb4 tb5
    第一次 myRandom.Next(0, myList.Count) 即 myRandom.Next(0, 5)
    等于给 j 赋了一个 0 <= j < 5 的值 比如 2
    这个时候 myList[2] 就能取到一个 textbox,用 as 转换后 赋值
    如果我不移除
    下个循环进来 还是 myRandom.Next(0, 5) 还是可能取到 2
    然后又 myList[2]
    这不就重复赋了
      

  19.   

    你把需要的textbox的readonly设true就是了
    如果是这9个
    那就加一句在赋值下面
    (myList[j] as TextBox).ReadOnly = true;
    使用 ReadOnly 属性指定能否更改 TextBox 控件的内容。将该属性设置为 true 将禁止用户输入值或更改现有的值。请注意,TextBox 控件的用户不能更改该属性;只有开发人员可以更改。
      

  20.   

    不是我改的是这样啊  高手别管我啊 我都做成这样了啊
    Random myRandom = new Random(); ArrayList myList = new ArrayList();
    foreach (Control control in Panel1.Controls)
    {
    if (control is TextBox)
    {
    myList.Add(control);
    }
    } for (int i = 0; i < 20; i++)
    {
    int j = myRandom.Next(0, myList.Count);

    (myList[j] as TextBox).Text = myRandom.Next(1,9).ToString();
    (myList[j] as TextBox).ReadOnly = true; myList.RemoveAt(j);
    }就是每次还让它取一到9但是不能每行每列不能重复  就这意思
      

  21.   

    (myList[j] as TextBox).Text = myRandom.Next(1,9).ToString();
    这句谁让你改了啊

    (myList[j] as TextBox).Text = (i + 1).ToString();