C#窗体程序,代码循环生成多个Button,点击其中
for(inti=1;i<21;i++){Buttonbtn=newButton();btn.Click+=newEventHandler(btn_Click);btn....
for(int i=1;i<21;i++)
{
Button btn = new Button();
btn.Click += new EventHandler(btn_Click);
btn.Size = new System.Drawing.Size(20,20);
}
btn.Location = new Point(i*30, i*20);
this.Controls.Add(btn);
void btn_Click(object sender, EventArgs e)
{
Button btn = sender as Button;
MessBox.Show(btn.Name.ToString());
}
问题:当我点击 某个按钮,弹出该按钮的Name属性信息,此时进入到void btn_Click(object sender, EventArgs e)方法中,那我如何得到该按钮的前一个按钮(生成该btn前的上一个按钮btn1),获得btn1的位置信息,即btn1.Location(,)
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
在线等!!!!急急急急急急急急急急急急。。。。。。 展开
{
Button btn = new Button();
btn.Click += new EventHandler(btn_Click);
btn.Size = new System.Drawing.Size(20,20);
}
btn.Location = new Point(i*30, i*20);
this.Controls.Add(btn);
void btn_Click(object sender, EventArgs e)
{
Button btn = sender as Button;
MessBox.Show(btn.Name.ToString());
}
问题:当我点击 某个按钮,弹出该按钮的Name属性信息,此时进入到void btn_Click(object sender, EventArgs e)方法中,那我如何得到该按钮的前一个按钮(生成该btn前的上一个按钮btn1),获得btn1的位置信息,即btn1.Location(,)
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
在线等!!!!急急急急急急急急急急急急。。。。。。 展开
5个回答
展开全部
直接把前一个按钮对象保存在当前按钮的Tag属性里面:
private void Form2_Load(object sender, EventArgs e)
{
Button btn1=null;//前一个按钮
for(int i=1;i<21;i++){
Button btn = new Button();
btn.Text = "button" + i;
btn.Name = "button" + i;
btn.Click += new EventHandler(btn_Click);
btn.Size = new System.Drawing.Size(80,20);
btn.Tag = btn1;
btn.Location = new Point(i * 30, i * 20);
this.Controls.Add(btn);
btn1 = btn;
}
}
void btn_Click(object sender, EventArgs e) {
Button btn = sender as Button;
MessageBox.Show(btn.Name.ToString());
if (btn.Tag != null)
{
//弹出前一个按钮的位置信息
Button btn1 = btn.Tag as Button;
MessageBox.Show("X:"+btn1.Location.X +" Y:"+ btn1.Location.X);
}
}
展开全部
这是部分代码还是原始的,如果是原始的,这里面问题就比较多,一般的写法
for(int i=0;i<btnlist.Lenght;i++)
{
Button btn = new Button();
btn.Click += new EventHandler(btn_Click);
btn.Size = new System.Drawing.Size(20,20);
btn.Tag=i;
btn.Location = new Point((i+1)*30, (i+1)*20);
his.Controls.Add(btn);
btnlist[i]=btn;
}
Button[] btnlist=new Button[20];
void btn_Click(object sender, EventArgs e)
{
Button btn = sender as Button;
int i=(int)btn.Tag;//得到序号,前一按钮为i-1
if(i>0)
{
MessBox.Show("前一按钮为"+(i-1));
//btnlist[i-1].Location即为前一按钮的位置
}
}
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
for(int i=1;i<21;i++){
Button btn = new Button();
btn.Click += new EventHandler(btnXXX_Click);
btn.Size = new System.Drawing.Size(90,20);
btn.Tag = i;
btn.Text = "Btn"+i;
btn.Name = "btn"+i;
btn.Location = new Point(23, i*20);
this.Controls.Add(btn);
}
void btnXXX_Click(object sender, EventArgs e)
{
Button btn = sender as Button;
int tag = Convert.ToInt32(btn.Tag);
tag=tag==1?1:tag-1;
Button btnPrev = this.Controls["btn" + tag] as Button;
MessageBox.Show(btnPrev.Text);
}
Button btn = new Button();
btn.Click += new EventHandler(btnXXX_Click);
btn.Size = new System.Drawing.Size(90,20);
btn.Tag = i;
btn.Text = "Btn"+i;
btn.Name = "btn"+i;
btn.Location = new Point(23, i*20);
this.Controls.Add(btn);
}
void btnXXX_Click(object sender, EventArgs e)
{
Button btn = sender as Button;
int tag = Convert.ToInt32(btn.Tag);
tag=tag==1?1:tag-1;
Button btnPrev = this.Controls["btn" + tag] as Button;
MessageBox.Show(btnPrev.Text);
}
本回答被提问者和网友采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
你的location是规则生成的,每个按钮都是x相差30的倍数,y相差20的倍数。前一个button的按钮的坐标=本身按钮的x-30,y-20
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
你new button的时候,多一行
btn.name = "xx"+i.ToString();
你不就知道编号了么
btn.name = "xx"+i.ToString();
你不就知道编号了么
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询