当前位置:编程学习 > C#/ASP.NET >>

panel 怎样模拟被选中

如题,我有好多panel,我想在点击panel的时候模拟一下被选中的效果,被选中时背景色变一下,就像文件夹被选中后,文件夹的颜色会变一样。

选中其他的panel时,之前那个被选中的panel背景色变成正常的就可以了。

请高手指点下迷津……谢谢 --------------------编程问答-------------------- 鼠标操作,mousedown的时候设置背景色。
--------------------编程问答--------------------
引用 1 楼 wuyazhe 的回复:
鼠标操作,mousedown的时候设置背景色。


谢谢,请问我怎么在选中其他panel的时候把之前选中的那个背景色还原啊? --------------------编程问答-------------------- 今天在家带小孩,没时间给你写例子。你搜索一下
IMessageFilter
如果看的懂,这个可以实现你的要求,不行的话,自己继承panel实现一个子类,然后子类中的ControlAdded事件中对子控件注册MouseDown事件,任何子控件或自己执行MouseDown则触发一个事件,窗体则注册此事件,设置激活的panel,其他的还原颜色。 --------------------编程问答--------------------
引用 3 楼 wuyazhe 的回复:
今天在家带小孩,没时间给你写例子。你搜索一下
IMessageFilter
如果看的懂,这个可以实现你的要求,不行的话,自己继承panel实现一个子类,然后子类中的ControlAdded事件中对子控件注册MouseDown事件,任何子控件或自己执行MouseDown则触发一个事件,窗体则注册此事件,设置激活的panel,其他的还原颜色。


晕了,不过还是感谢您在百忙中抽出时间帮忙,我先去看看。非常感谢。 --------------------编程问答-------------------- 可用一个字段记录当前选中的控件ID
单击时判断该控件的背景颜色是否为选中时的颜色,否则变为选中,将该控件ID设为当前选中的ID --------------------编程问答-------------------- 不知道你的多个panel是在一个form中还是不同的form中,如果是一个form中,你可以遍历当前form中panel先清除,再对你选择的panel设置背景颜色 --------------------编程问答--------------------

private void Method(Point p)
        {
            Panel[] panelArray =
                new Panel[] { panel2, panel3, panel4 };
            Rectangle[] rectagleArray =
                new Rectangle[] { new Rectangle(panel2.Location,panel2.Size),
                                  new Rectangle(panel3.Location,panel3.Size),
                                  new Rectangle(panel4.Location,panel4.Size),};

            for (int j = 0; j < rectagleArray.Length; j++)
            {
                if (rectagleArray[j].Contains(p))
                {
                    panelArray[j].BackColor = Color.Red;
                }
                else
                {
                    panelArray[j].BackColor = Color.White;
                }
            }
        }

在每个panel的mouseDown事件里调用下面代码。

Method(new Point(e.X + 当前panel的NAME.Location.X, e.Y + 当前panel的NAME.Location.Y));

--------------------编程问答-------------------- 学习了
--------------------编程问答--------------------
引用 3 楼 wuyazhe 的回复:
今天在家带小孩,没时间给你写例子。你搜索一下
IMessageFilter
如果看的懂,这个可以实现你的要求,不行的话,自己继承panel实现一个子类,然后子类中的ControlAdded事件中对子控件注册MouseDown事件,任何子控件或自己执行MouseDown则触发一个事件,窗体则注册此事件,设置激活的panel,其他的还原颜色。


逍遥哥方便给个例子吗?学习下。 --------------------编程问答--------------------

Panel p1 = null; //之前选中的


void Panel_Click(sender,e)
{
   if(p1 != null)
   {
     p1.BackgroundColor = SystemColor.Control;
   }
   Panel p = sender as Panel;
   p.BackgroundColor = Color.Red;

   p1 = p;
   
}


手动巧的,可能有些错误,自己重新敲一遍
补充:.NET技术 ,  C#
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,