首先 把你的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
对不起,上面那个[]去掉如果是给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!
如果不是 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); }
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);} }这个可以编译 但每次取出来的值不一样啊
完善判断 这样 再不行我就去跳……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); }
不是我改的是这样啊 高手别管我啊 我都做成这样了啊 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但是不能每行每列不能重复 就这意思
(myList[j] as TextBox).Text = myRandom.Next(1,9).ToString(); 这句谁让你改了啊 改 (myList[j] as TextBox).Text = (i + 1).ToString();
i为1~81的随机数
赋值时就可以给固定的9个Textbox赋值就可以了
把你的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
那得这样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!
随机抽9个不同的textbox
分别赋1-9这9个数
不知道是不是符合你的需求
如果是20个
你把for里面的i改了就是了啊
这个什么意思啊!是加入范围吗?
加入一个collection
panel.Controls 就是一个collection
这样不用遍历一个一个加
谢谢
下面再有点小改动 先前有点 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);
}
{
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);}
}这个可以编译
但每次取出来的值不一样啊
我实现的是随机取9个textbox
分别给1-9的值
代码 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();
}
你的容器里是不是有其它本不属于这81个集合里的textbox啊
这样
再不行我就去跳……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);
}
这个函数是做什么的 啊 高手
这是为了保证下次循环过来不取到同一个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]
这不就重复赋了
如果是这9个
那就加一句在赋值下面
(myList[j] as TextBox).ReadOnly = true;
使用 ReadOnly 属性指定能否更改 TextBox 控件的内容。将该属性设置为 true 将禁止用户输入值或更改现有的值。请注意,TextBox 控件的用户不能更改该属性;只有开发人员可以更改。
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但是不能每行每列不能重复 就这意思
这句谁让你改了啊
改
(myList[j] as TextBox).Text = (i + 1).ToString();