菜鸟一问!大神速来。给n个同类型控件添加事件的问题。

问心剑阁 2016-10-25 05:09:18
界面上已经存在N个T类型的控件,怎么给这些控件添加一个事件,比如单击事件,当用户单击其中某个控件,事件会根据不同的控件id执行不同的操作。
...全文
445 18 打赏 收藏 转发到动态 举报
写回复
用AI写文章
18 条回复
切换为时间正序
请发表友善的回复…
发表回复
D56233577 2016-10-26
  • 打赏
  • 举报
回复
如果你用的是WPF,可以使用冒泡事件,简单粗暴。
小鬼当家家 2016-10-26
  • 打赏
  • 举报
回复
引用 4 楼 qixin0010 的回复:
感谢楼上。但是在事件中,我想操作某个控件比如说,让btn1的text属性改为“btn1”,怎么操作啊? 我在click事件中的代码部分 string arcName; Button arc; var sender2 = (Button) sender; arcName = "btn + sender2.Name.Substring(6); arc.Name = arcName; arc.text=arcName ; 这样无法实现啊。这是创建的新Button控件实例。怎么调用界面上已经拖上去的button控件呢?
直接在click事件中设置btn的text不就完了。btn1.text="btn1";
问心剑阁 2016-10-26
  • 打赏
  • 举报
回复
感谢楼上。但是在事件中,我想操作某个控件比如说,让btn1的text属性改为“btn1”,怎么操作啊? 我在click事件中的代码部分 string arcName; Button arc; var sender2 = (Button) sender; arcName = "btn + sender2.Name.Substring(6); arc.Name = arcName; arc.text=arcName ; 这样无法实现啊。这是创建的新Button控件实例。怎么调用界面上已经拖上去的button控件呢?
TikYang 2016-10-26
  • 打赏
  • 举报
回复
为什么要用 foreach ,定义一个控件不就成了,然后继承.......
问心剑阁 2016-10-26
  • 打赏
  • 举报
回复
搞定了,代码贴出来。感谢各位大神。 foreach (var i in this.Controls) { if (i is DevExpress.XtraGauges.Win.GaugeControl) { var y = (DevExpress.XtraGauges.Win.GaugeControl)i; y.Click += new EventHandler(click); } } public static void click(object sender, EventArgs e) { var sender2 = (DevExpress.XtraGauges.Win.GaugeControl)sender; DevExpress.XtraGauges.Win.Gauges.Circular.CircularGauge c1 = (DevExpress.XtraGauges.Win.Gauges.Circular.CircularGauge)sender2.Gauges[0]; DevExpress.XtraGauges.Win.Gauges.Circular.ArcScaleComponent d1 = (DevExpress.XtraGauges.Win.Gauges.Circular.ArcScaleComponent)c1.Scales[0]; if (d1.Value + (d1.MaxValue - d1.MinValue) / 5.0f > d1.MaxValue + (d1.MaxValue - d1.MinValue) / 100.0f) { d1.Value = 0; } else { d1.Value += (d1.MaxValue - d1.MinValue) / 5.0f; } }
问心剑阁 2016-10-26
  • 打赏
  • 举报
回复
DevExpress.XtraGauges.Win.Gauges.Circular.ArcScaleComponent类型的控件 不能通过遍历搜索访问!! 用通过DevExpress.XtraGauges.Win.GaugeControl.Gauges[0].Scales[0] 访问!!!
我叫小菜菜 2016-10-26
  • 打赏
  • 举报
回复
没什么好说的,就是定义一次btnClick函数,然后循环遍历btn[i].Click += btnClick;
stherix 2016-10-26
  • 打赏
  • 举报
回复
引用 12 楼 qixin0010 的回复:
多谢各位大神指导。知道怎么做了。 但是我发现用 foreach (var item in this.Controls) 搜索不到DevExpress.XtraGauges.Win.Gauges.Circular.ArcScaleComponent类型的控件啊。
要看你这些控件放在哪个容器上 如果直接放在窗体上的可以这么 如果放在其他panel之类上面的 你就需要去遍历panel的子控件列表
BitCoffee 2016-10-26
  • 打赏
  • 举报
回复
你这些控件的父容器是Form还是其它的Panel?
问心剑阁 2016-10-26
  • 打赏
  • 举报
回复
多谢各位大神指导。知道怎么做了。 但是我发现用 foreach (var item in this.Controls) 搜索不到DevExpress.XtraGauges.Win.Gauges.Circular.ArcScaleComponent类型的控件啊。
assky124 2016-10-26
  • 打赏
  • 举报
回复
不是很简单 private void Init(){ List<Button> btns = new List<Button>(); for(int i =0;i<10;i++){ var btn = new Button(); btn.Text = "Btn" + (i+1).ToString(); btn.Click += btnClick; btn.Tag = i+1; } } private void btnClick(s,e){ var btn = s as Button; btn.Text = "Change Text" + btn.Tag.ToString(); } 差不多这样吧
stherix 2016-10-26
  • 打赏
  • 举报
回复
你的所有btnyinggaidoufangzaiy应该都放在一个父容器吧 比如form,panel之类的 那么用form.Controls就可以获取窗体上的控件列表 用一个for/foreach循环遍历 如果是Button就 control.Click+=你的click事件 foreach(var control in form.Controls) { if (control is Button) { var button=control as Button; button.Click+=ButtonClicked; } }
BitCoffee 2016-10-26
  • 打赏
  • 举报
回复
引用 4 楼 qixin0010 的回复:
感谢楼上。但是在事件中,我想操作某个控件比如说,让btn1的text属性改为“btn1”,怎么操作啊? 我在click事件中的代码部分 string arcName; Button arc; var sender2 = (Button) sender; arcName = "btn + sender2.Name.Substring(6); arc.Name = arcName; arc.text=arcName ; 这样无法实现啊。这是创建的新Button控件实例。怎么调用界面上已经拖上去的button控件呢?
foreach (var i in this.Controls) { if (i is T) { T t = (T)i; t.Text = "btn" + t.Name.Substring(6); t.OnClick +=..............; } }
D56233577 2016-10-26
  • 打赏
  • 举报
回复
引用 7 楼 qixin0010 的回复:
问题是有很多个控件 都手动分别添加click事件 不是很烦啊
既然是初学,不如直接上WPF,用冒泡事件只需要在一个地方写一次就够了。不过循环也没几行代码,能有多烦。
问心剑阁 2016-10-26
  • 打赏
  • 举报
回复
问题是有很多个控件 都手动分别添加click事件 不是很烦啊
  • 打赏
  • 举报
回复
当然也可以一次性(更快一点)来判断:
var y = x as Button;
if( y != null)
{
    y.OnClick += ..........;
}
  • 打赏
  • 举报
回复
假设一个变量(例如名为 x )声明为 Control,你可以类似这样判断
if( x is Button)
{
    var y = (Button) x;
    y.OnClick += ..........;
}
问心剑阁 2016-10-25
  • 打赏
  • 举报
回复
伪代码 foreach (var i in this.Controls) { if (i is T) { i.OnClick +=; } } 但是i.OnClick 不对啊

111,129

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Creator Browser
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧