代码如下:
foreach (var item in tag)
{
Button btn = new Button();
btn.Text = item.name;
btn.Name = item.id.ToString();
btn.FlatStyle = System.Windows.Forms.FlatStyle.Flat;
btn.BackColor = System.Drawing.Color.DarkSlateGray;
btn.ForeColor = System.Drawing.Color.White;
btn.FlatAppearance.BorderSize = 0;
btn.Font = new System.Drawing.Font("宋体", 9F,
System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134)));
//随机数
int x = RamdonX(btn);
//随机数
int y = RamdonY(btn);
btn.Location = new Point(x, y);
btn.Click += new System.EventHandler(this.tagBtn_Click);
groupBox2.Controls.Add(btn);
}
直接运行程序样式:
加断点调试运行样式:
我是动态的从数据库里添加按钮,每个按钮的位置我都给了随机数,但是运行窗体按钮重叠。但是我加断点调试按钮在不同位置,不重叠。请问我的代码有什么问题吗?
你代码放在什么事件里的? 你可以放在 activated事件里试一下
我放在窗体Load事件里了
窗体的activated事件我试过了,不行啊,按钮还是重叠的
@恶之必要: 晚点我帮你调试看看
@jqw2009: 好的,谢谢
@jqw2009: 您是不是忘记了,帮帮我啊
@恶之必要: 稍等
@恶之必要: 我测试了一下,位置是没问题的,问题应该出现在你的随机数,你运行的时候将XY数值直接显示在界面上,这样你就可以看到是不是每次xy的数值都一样?
因为你的 RamdonX 函数不知道具体代码,没法测试你的随机数
@jqw2009:
这是我随机数的代码
private int RamdonX(Button btn)
{
Random rd = new Random();
//(生成1~10之间的随机数,不包括10)
return rd.Next(10, this.groupBox2.Size.Width - (btn.Size.Width + 10));
}
private int RamdonY(Button btn)
{
Random rd = new Random();
//(生成1~10之间的随机数,不包括10)
return rd.Next(18, this.groupBox2.Size.Height - (btn.Size.Height + 15));
}
@恶之必要: Random rd = new Random(); 要改成全局变量,不要每次都new,因为随机函数并不是真的随机,也是有规律的
第二个方法就是 Random rd = new Random((int)System.DateTime.Now.Ticks); 随机函数加个种子,这样重复的概率就小了
@jqw2009: 可以了,谢谢你