非常基本的C#,form操作,thx 通过 (sender as Button).Name来判断或是其他的 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 除了name外...有没有其他方法? private void button1_Click(object sender, EventArgs e)object sender //谁发起消息的~虽然两个都是Button,但她们是各自属性比如id等,所以你找找有什么属性可以区分她们通常是id或name之类的 定义不同的 tag也可以。 两个button在一个form上用相同的text有意思吗?没有的话,用text来区别都行啊 最好不要两个Button指向同一事件。需要单击两个Button运行同样代码时,最好封装为方法,在不同的事件中调用这个方法。 Sender包含有发送者的全部信息,可以轻松通过sender得到button的属性((button)sender).name ... 可以做出选择 (sender as Button).Name 这个逻辑不正常啊 2个button名字不一样,双击后生成的事件应该也不会是相同的事件除非你是先建立了个button1,然后双击生成了private void button1_Click(object sender, EventArgs e) { } 之后又复制了个button2出来,这时其实将button1里的事件也复制出来了你可以在button2的属性页面找事件,清空click事件,重新双击生成新的事件private void button2_Click(object sender, EventArgs e) { } 只要两个Button有一个可访问属性,而你两个button的不一样,就可以区分出来,类似上面的Name(在一个窗体中,不可重复) (Button)sender.Tag,(Button)sender.Name等等等等…… private void button1_Click(object sender, EventArgs e){method(1);}private void button2_Click(object sender, EventArgs e){method(2);}private void method(int num){xxxxxxxxx}为什么不这样呢?费个劲啊! ((button)sender).name晕,被别人先答了sender就是产生事件的控件,如果是按钮的话,你可以强转为button然后调用里边的name或者text等等一切能区分的属性来进行区分 难道你不是用VS找编写的?或者是你的VS没有操作视图?先把 button2原来绑定的事件清除,然后直接重新双击就可以了 这个设计不大合理,为何2个按钮都调用同样处理。你可以通过sender来得到2个按钮的信息,以此来判断是那个按钮调用。或者,把同样处理的代码封装成方法,方法参数里面有个标识,不同按钮传过来的值不同。不过还是不理解你的设计。 判断条件很多的。NAME,Tag,TextInde,Size,Location,Image,BackColor,BackgroundImage,Course,Font,ForeColorif (this.button1 != this.button2) { } 是这样的。这其实就是“大白话”,判断sender是不是button1,而不用判断Name属性。 看你的等级也不低的了,怎么能说出这样的话"在一个窗体中,不可重复"; 不要因为设计器编译不通过就说不能重复。 控件的唯一性,绝对不是name,应该是内存中的地址,Quote: 引用 22 楼 sp1234 的回复:Quote: 引用 15 楼 WM_JAWIN 的回复:if (sender ==button1)针对你提出的问题 这个方法是比较好的: 看你的等级也不低的了,怎么能说出这样的话"在一个窗体中,不可重复"; 不要因为设计器编译不通过就说不能重复。 控件的唯一性,绝对不是name,应该是内存中的地址,如果name可以重复,那么sender ==button1也无法判断.因为2个控件都叫button1 button的name属性其实就是button的变量名称,这跟int,bool变量其实是一样的在同一窗体的同一可见性级别下,变量名称是不能重复的,否则编译器根本无法区分.会提示你此变量已经定义过. 如果是动态生成按钮,给你一段代码参考下先写出事件处理,根据tag来区分按钮。private void Button_Click(object sender, EventArgs e){ int index = (int)(sender as Button).Tag; switch (index) { default: break; }}然后是动态生成按钮并绑定private void Form1_Load(object sender, EventArgs e){ for (int i = 0; i < 10; i++) { Button btn = new Button() { Tag = i, }; btn.Click += Button_Click; Controls.Add(btn); }} 都说了 "不要因为设计器 编译不过 而不能存在",你代码创建控件, 名称全部一样 ,也包括变量 private void CreateButton() { for (int i = 0; i < 2; i++) { Button btn = new Button(); btn.Name = "btn"; btn.Click += new EventHandler(btn_Click); //btn.Text = "测试"+i.ToString(); btn.Location = new Point(i * 100 + 10, 10); this.Controls.Add(btn); } } private void btn_Click(object sender, EventArgs e) { Button btn = sender as Button; } 如何添加MFC的COM到c#程序中 我用winform做的软件只要选择保存在哪个文件夹,不要文件名怎么做? 斑竹进 vs2008怎么把控件设成绝对位置 项目文档管理,请高手给出解决方案?(绝对是个典型问题,对你和你的公司都有很大的帮助) 嫉妒郁闷的问题 如何限制用户在客户段只能运行一个程序?在线等 事件 why !!!!help me C#控制外部程序的菜单和按钮的问题 查询一个时间段内的记录,并显示在datagridview 部署到IIS上的asp.net网站后台的json反序列化
有没有其他方法?
private void button1_Click(object sender, EventArgs e)
object sender //谁发起消息的~虽然两个都是Button,但她们是各自属性
比如id等,所以你找找有什么属性可以区分她们
通常是id或name之类的
定义不同的 tag也可以。
需要单击两个Button运行同样代码时,最好封装为方法,在不同的事件中调用这个方法。
((button)sender).name ...
可以做出选择
(sender as Button).Name
2个button名字不一样,双击后生成的事件应该也不会是相同的事件
除非你是先建立了个button1,然后双击生成了private void button1_Click(object sender, EventArgs e) { }
之后又复制了个button2出来,这时其实将button1里的事件也复制出来了你可以在button2的属性页面找事件,清空click事件,重新双击生成新的事件
private void button2_Click(object sender, EventArgs e) { }
{
method(1);
}
private void button2_Click(object sender, EventArgs e)
{
method(2);
}
private void method(int num)
{
xxxxxxxxx
}
为什么不这样呢?费个劲啊!
晕,被别人先答了
sender就是产生事件的控件,如果是按钮的话,你可以强转为button然后调用里边的name或者text等等一切能区分的属性来进行区分
你可以通过sender来得到2个按钮的信息,以此来判断是那个按钮调用。或者,把同样处理的代码封装成方法,方法参数里面有个标识,不同按钮传过来的值不同。不过还是不理解你的设计。
判断条件很多的。NAME,Tag,TextInde,Size,Location,Image,BackColor,BackgroundImage,
Course,Font,ForeColorif (this.button1 != this.button2) {
}
是这样的。这其实就是“大白话”,判断sender是不是button1,而不用判断Name属性。
看你的等级也不低的了,怎么能说出这样的话"在一个窗体中,不可重复"; 不要因为设计器编译不通过就说不能重复。 控件的唯一性,绝对不是name,应该是内存中的地址,
看你的等级也不低的了,怎么能说出这样的话"在一个窗体中,不可重复"; 不要因为设计器编译不通过就说不能重复。 控件的唯一性,绝对不是name,应该是内存中的地址,如果name可以重复,那么sender ==button1也无法判断.因为2个控件都叫button1
这跟int,bool变量其实是一样的
在同一窗体的同一可见性级别下,变量名称是不能重复的,否则编译器根本无法区分.会提示你此变量已经定义过.
先写出事件处理,根据tag来区分按钮。
private void Button_Click(object sender, EventArgs e)
{
int index = (int)(sender as Button).Tag;
switch (index)
{
default:
break;
}
}
然后是动态生成按钮并绑定
private void Form1_Load(object sender, EventArgs e)
{
for (int i = 0; i < 10; i++)
{
Button btn = new Button()
{
Tag = i,
};
btn.Click += Button_Click;
Controls.Add(btn);
}
}
都说了 "不要因为设计器 编译不过 而不能存在",你代码创建控件, 名称全部一样 ,也包括变量 private void CreateButton()
{
for (int i = 0; i < 2; i++)
{
Button btn = new Button();
btn.Name = "btn";
btn.Click += new EventHandler(btn_Click);
//btn.Text = "测试"+i.ToString();
btn.Location = new Point(i * 100 + 10, 10);
this.Controls.Add(btn); }
} private void btn_Click(object sender, EventArgs e)
{
Button btn = sender as Button;
}