解决方案 »

  1.   

    巧妙利用类成员解决这个问题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;
    }
      

  2.   

    在用户控件封装个Index属性,类型为Int
    主窗体点击的时候也定义个Int类型变量currentIndex记录点击的控件的Index
    主窗体Form.Controls.OfType<UserStations>().ToList().ForEach(uc=>
    {
    if(uc.Index==currentIndex)
    {
        变颜色;
    }
    else
    {
        变回去;
    }
    });
      

  3.   

    UserStations中定义一个static的List<UserStations>.使用单件模式取得它的实例。
    UserStations的构造函数中将this 加入到List<UserStations>中。点击事件触发是改变颜色时,遍历List<UserStations>,如果不是自己Reset color到原始色。
      

  4.   

    你这个方法我想过,但是没地儿写啊,我自定义控件的单击事件里面就是个变颜色,主界面的话写在哪?主界面就一个加载控件的方法,没有点击事件的。也就是说点击事件与主界面无关啊,就是自定义控件自己的一个的点击click事件。
      

  5.   

    你这个方法我想过,但是没地儿写啊,我自定义控件的单击事件里面就是个变颜色,主界面的话写在哪?主界面就一个加载控件的方法,没有点击事件的。也就是说点击事件与主界面无关啊,就是自定义控件自己的一个的点击click事件。1楼代码不满意吗?
      

  6.   

    你这个方法我想过,但是没地儿写啊,我自定义控件的单击事件里面就是个变颜色,主界面的话写在哪?主界面就一个加载控件的方法,没有点击事件的。也就是说点击事件与主界面无关啊,就是自定义控件自己的一个的点击click事件。3楼 1楼的都可以啊
      

  7.   

    我的状况估计你们都还没明白啊。我也知道是点第二个的时候恢复第一个啊。是这样的:我的主界面就是个按钮“加载”,点击后
    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个控件都会执行这个单击事件,还是一样的。不知道我说的是不是很混淆,对不起各位了,但是我自己觉得还是表达清楚了。)
      

  8.   


    怎么可能,我测试过了 ,是在UserStations里处理 
      

  9.   

    我猜楼主是想自己制作一个button控件,效果是点击按钮后按钮本身会变色,但是功能上就是个按钮的功能,不知道我说的对不对?
    我没做过控件不知道怎么帮你啦!
    不过我觉得单击事件还是写在主界面比较好。
      

  10.   

    你不应该在tableLayoutPanel里写 UserStations 单击 后改变颜色的代码//删了 
     private void tableLayoutPanel_Click(object sender, EventArgs e)
            {
                this.tableLayoutPanel.BackColor = Color.Pink;
                this.BorderStyle = BorderStyle.Fixed3D;
            }  
      

  11.   

    不好意思,三楼的大哥,你是对的,一楼的估计也是对的,我刚才头脑糊涂了,自己写错了。太感谢了,very much。
      

  12.   

    tableLayoutPanel是我的UserStations 这个自定义控件的面板啊,其实就是改变他的颜色啊。
      

  13.   


    怎么啦。?我刚才写在UserStations的单击事件里,点了都没反应,我这个Userstations控件其实就是放了个面板tableLayoutPanel,还是要写在那个面板的单击事件里面,但是还有个问题啊,我的面板上还加载了其他的用户控件,这个单击事件就出问题了,当我点在面板上的时候单击事件才出来,面板中间的地方:有其他控件的地方,点了没反应。这样不怎么好啊,人家点这个面板,总不可能挑着地方点吧?
      

  14.   


    怎么啦。?我刚才写在UserStations的单击事件里,点了都没反应,我这个Userstations控件其实就是放了个面板tableLayoutPanel,还是要写在那个面板的单击事件里面,但是还有个问题啊,我的面板上还加载了其他的用户控件,这个单击事件就出问题了,当我点在面板上的时候单击事件才出来,面板中间的地方:有其他控件的地方,点了没反应。这样不怎么好啊,人家点这个面板,总不可能挑着地方点吧?
    你这样做软件人家到时候测试的时候还不是要你自己改
      

  15.   


    怎么啦。?我刚才写在UserStations的单击事件里,点了都没反应,我这个Userstations控件其实就是放了个面板tableLayoutPanel,还是要写在那个面板的单击事件里面,但是还有个问题啊,我的面板上还加载了其他的用户控件,这个单击事件就出问题了,当我点在面板上的时候单击事件才出来,面板中间的地方:有其他控件的地方,点了没反应。这样不怎么好啊,人家点这个面板,总不可能挑着地方点吧?
    你这样做软件人家到时候测试的时候还不是要你自己改我知道啊,我没想到什么好方案解决这个事情,我想要的效果是只要点这个面板范围内,就响应单击事件,可是现在的情况却不是,因为面板里面加载的还有其他的一些用户控件,点到那些用户控件的范围里就不能响应那个单击事件了。烦恼啊。