C#自定义控件事件的问题。。。在线等待指点。。。。!!!! 控件c#winfrom事件 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 巧妙利用类成员解决这个问题public partial class UserStations : UserControl{ private static UserStations preCtl = null; private static Color default_Color = SystemColors.Control; //constructor Click Event: if (preCtl != null) preCtl.BackColor = default_Color; BackColor = Color.Red; preCtl = this;} 在用户控件封装个Index属性,类型为Int主窗体点击的时候也定义个Int类型变量currentIndex记录点击的控件的Index主窗体Form.Controls.OfType<UserStations>().ToList().ForEach(uc=>{if(uc.Index==currentIndex){ 变颜色;}else{ 变回去;}}); UserStations中定义一个static的List<UserStations>.使用单件模式取得它的实例。UserStations的构造函数中将this 加入到List<UserStations>中。点击事件触发是改变颜色时,遍历List<UserStations>,如果不是自己Reset color到原始色。 你这个方法我想过,但是没地儿写啊,我自定义控件的单击事件里面就是个变颜色,主界面的话写在哪?主界面就一个加载控件的方法,没有点击事件的。也就是说点击事件与主界面无关啊,就是自定义控件自己的一个的点击click事件。 你这个方法我想过,但是没地儿写啊,我自定义控件的单击事件里面就是个变颜色,主界面的话写在哪?主界面就一个加载控件的方法,没有点击事件的。也就是说点击事件与主界面无关啊,就是自定义控件自己的一个的点击click事件。1楼代码不满意吗? 你这个方法我想过,但是没地儿写啊,我自定义控件的单击事件里面就是个变颜色,主界面的话写在哪?主界面就一个加载控件的方法,没有点击事件的。也就是说点击事件与主界面无关啊,就是自定义控件自己的一个的点击click事件。3楼 1楼的都可以啊 我的状况估计你们都还没明白啊。我也知道是点第二个的时候恢复第一个啊。是这样的:我的主界面就是个按钮“加载”,点击后Stations.UserStations _UserStation = new Stations.UserStations();this.flowLayoutPanel.Controls.Add(_UserStation);加载控件。循环加了N多个到这个panel上。然后每个控件都有单击事件,这是我的自定义控件内部的单击事件: private void tableLayoutPanel_Click(object sender, EventArgs e) { this.tableLayoutPanel.BackColor = Color.Pink; this.BorderStyle = BorderStyle.Fixed3D; } //这就是我的自定义控件里面的一个click事件。 也就是说我在主界面上点这N个自定义控件的时候,都是触发的我自定义控件内部的这个click事件啊(所以就出现了这个问题:只要是点了自定义控件,就变色了,因为都触发了这个单击事件了。而我在自定义控件里面又无法标记,必须到主界面加载控件的时候标记,我现在给每个控件标记好了,却不知道在哪里来写代码控制,主界面是没有这个单击事件的。如果在自定义控件的单击事件里面来写的话,那又行不通,因为你写了代码后,主界面上加载的这N个控件都会执行这个单击事件,还是一样的。不知道我说的是不是很混淆,对不起各位了,但是我自己觉得还是表达清楚了。) 怎么可能,我测试过了 ,是在UserStations里处理 我猜楼主是想自己制作一个button控件,效果是点击按钮后按钮本身会变色,但是功能上就是个按钮的功能,不知道我说的对不对?我没做过控件不知道怎么帮你啦!不过我觉得单击事件还是写在主界面比较好。 你不应该在tableLayoutPanel里写 UserStations 单击 后改变颜色的代码//删了 private void tableLayoutPanel_Click(object sender, EventArgs e) { this.tableLayoutPanel.BackColor = Color.Pink; this.BorderStyle = BorderStyle.Fixed3D; } 不好意思,三楼的大哥,你是对的,一楼的估计也是对的,我刚才头脑糊涂了,自己写错了。太感谢了,very much。 tableLayoutPanel是我的UserStations 这个自定义控件的面板啊,其实就是改变他的颜色啊。 怎么啦。?我刚才写在UserStations的单击事件里,点了都没反应,我这个Userstations控件其实就是放了个面板tableLayoutPanel,还是要写在那个面板的单击事件里面,但是还有个问题啊,我的面板上还加载了其他的用户控件,这个单击事件就出问题了,当我点在面板上的时候单击事件才出来,面板中间的地方:有其他控件的地方,点了没反应。这样不怎么好啊,人家点这个面板,总不可能挑着地方点吧? 怎么啦。?我刚才写在UserStations的单击事件里,点了都没反应,我这个Userstations控件其实就是放了个面板tableLayoutPanel,还是要写在那个面板的单击事件里面,但是还有个问题啊,我的面板上还加载了其他的用户控件,这个单击事件就出问题了,当我点在面板上的时候单击事件才出来,面板中间的地方:有其他控件的地方,点了没反应。这样不怎么好啊,人家点这个面板,总不可能挑着地方点吧?你这样做软件人家到时候测试的时候还不是要你自己改 怎么啦。?我刚才写在UserStations的单击事件里,点了都没反应,我这个Userstations控件其实就是放了个面板tableLayoutPanel,还是要写在那个面板的单击事件里面,但是还有个问题啊,我的面板上还加载了其他的用户控件,这个单击事件就出问题了,当我点在面板上的时候单击事件才出来,面板中间的地方:有其他控件的地方,点了没反应。这样不怎么好啊,人家点这个面板,总不可能挑着地方点吧?你这样做软件人家到时候测试的时候还不是要你自己改我知道啊,我没想到什么好方案解决这个事情,我想要的效果是只要点这个面板范围内,就响应单击事件,可是现在的情况却不是,因为面板里面加载的还有其他的一些用户控件,点到那些用户控件的范围里就不能响应那个单击事件了。烦恼啊。 关于string.Format(string,object[])的用法含义 求一个socket通信的服务器端 软件工程开发文档 新手提问:如何把多个表里的某些字段的数据在前台界面显示出来? 百分求解.SqlDataAdapter 的問題 .http://community.csdn.net/Expert/topic/4916/4916326.xml?temp=.3271143 如何将内存中的图片通过directx显示出来 C# 关于串口进制转换问题 2个小问题,请高手帮忙 有参加过mcad认证的朋友吗? 水晶报表 sql怎么转换成linq 菜鸟新问:.net内网访问ftp
{
private static UserStations preCtl = null;
private static Color default_Color = SystemColors.Control; //constructor Click Event: if (preCtl != null) preCtl.BackColor = default_Color;
BackColor = Color.Red;
preCtl = this;
}
主窗体点击的时候也定义个Int类型变量currentIndex记录点击的控件的Index
主窗体Form.Controls.OfType<UserStations>().ToList().ForEach(uc=>
{
if(uc.Index==currentIndex)
{
变颜色;
}
else
{
变回去;
}
});
UserStations的构造函数中将this 加入到List<UserStations>中。点击事件触发是改变颜色时,遍历List<UserStations>,如果不是自己Reset color到原始色。
Stations.UserStations _UserStation = new Stations.UserStations();
this.flowLayoutPanel.Controls.Add(_UserStation);
加载控件。循环加了N多个到这个panel上。然后每个控件都有单击事件,这是我的自定义控件内部的单击事件: private void tableLayoutPanel_Click(object sender, EventArgs e)
{
this.tableLayoutPanel.BackColor = Color.Pink;
this.BorderStyle = BorderStyle.Fixed3D;
} //这就是我的自定义控件里面的一个click事件。 也就是说我在主界面上点这N个自定义控件的时候,都是触发的我自定义控件内部的这个click事件啊(所以就出现了这个问题:只要是点了自定义控件,就变色了,因为都触发了这个单击事件了。而我在自定义控件里面又无法标记,必须到主界面加载控件的时候标记,我现在给每个控件标记好了,却不知道在哪里来写代码控制,主界面是没有这个单击事件的。如果在自定义控件的单击事件里面来写的话,那又行不通,因为你写了代码后,主界面上加载的这N个控件都会执行这个单击事件,还是一样的。不知道我说的是不是很混淆,对不起各位了,但是我自己觉得还是表达清楚了。)
怎么可能,我测试过了 ,是在UserStations里处理
我没做过控件不知道怎么帮你啦!
不过我觉得单击事件还是写在主界面比较好。
private void tableLayoutPanel_Click(object sender, EventArgs e)
{
this.tableLayoutPanel.BackColor = Color.Pink;
this.BorderStyle = BorderStyle.Fixed3D;
}
怎么啦。?我刚才写在UserStations的单击事件里,点了都没反应,我这个Userstations控件其实就是放了个面板tableLayoutPanel,还是要写在那个面板的单击事件里面,但是还有个问题啊,我的面板上还加载了其他的用户控件,这个单击事件就出问题了,当我点在面板上的时候单击事件才出来,面板中间的地方:有其他控件的地方,点了没反应。这样不怎么好啊,人家点这个面板,总不可能挑着地方点吧?
怎么啦。?我刚才写在UserStations的单击事件里,点了都没反应,我这个Userstations控件其实就是放了个面板tableLayoutPanel,还是要写在那个面板的单击事件里面,但是还有个问题啊,我的面板上还加载了其他的用户控件,这个单击事件就出问题了,当我点在面板上的时候单击事件才出来,面板中间的地方:有其他控件的地方,点了没反应。这样不怎么好啊,人家点这个面板,总不可能挑着地方点吧?
你这样做软件人家到时候测试的时候还不是要你自己改
怎么啦。?我刚才写在UserStations的单击事件里,点了都没反应,我这个Userstations控件其实就是放了个面板tableLayoutPanel,还是要写在那个面板的单击事件里面,但是还有个问题啊,我的面板上还加载了其他的用户控件,这个单击事件就出问题了,当我点在面板上的时候单击事件才出来,面板中间的地方:有其他控件的地方,点了没反应。这样不怎么好啊,人家点这个面板,总不可能挑着地方点吧?
你这样做软件人家到时候测试的时候还不是要你自己改我知道啊,我没想到什么好方案解决这个事情,我想要的效果是只要点这个面板范围内,就响应单击事件,可是现在的情况却不是,因为面板里面加载的还有其他的一些用户控件,点到那些用户控件的范围里就不能响应那个单击事件了。烦恼啊。