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(,)
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
在线等!!!!急急急急急急急急急急急急。。。。。。
展开
 我来答
何宜校
2013-09-30 · TA获得超过1691个赞
知道小有建树答主
回答量:702
采纳率:0%
帮助的人:964万
展开全部

直接把前一个按钮对象保存在当前按钮的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);
            }
        }
syht2000
高粉答主

2013-09-30 · 关注我不会让你失望
知道大有可为答主
回答量:3万
采纳率:79%
帮助的人:1.4亿
展开全部

这是部分代码还是原始的,如果是原始的,这里面问题就比较多,一般的写法

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即为前一按钮的位置
  }
}
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
weizejun198909
推荐于2018-03-14 · 超过38用户采纳过TA的回答
知道小有建树答主
回答量:96
采纳率:0%
帮助的人:72.9万
展开全部
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 btnPrev = this.Controls["btn" + tag] as Button;          
 MessageBox.Show(btnPrev.Text);

 btnPrev好像没有实例化,无法根据.Name属性得到btnPrev,

  • 但是我要的就是这个,请大神指点。。。。。。。

本回答被提问者和网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
gushoushi
2013-09-30 · TA获得超过219个赞
知道小有建树答主
回答量:272
采纳率:0%
帮助的人:244万
展开全部
你的location是规则生成的,每个按钮都是x相差30的倍数,y相差20的倍数。前一个button的按钮的坐标=本身按钮的x-30,y-20
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
取券啦
2013-09-30 · TA获得超过107个赞
知道小有建树答主
回答量:174
采纳率:0%
帮助的人:155万
展开全部
你new button的时候,多一行
btn.name = "xx"+i.ToString();

你不就知道编号了么
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(3)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式