panel 怎样模拟被选中
如题,我有好多panel,我想在点击panel的时候模拟一下被选中的效果,被选中时背景色变一下,就像文件夹被选中后,文件夹的颜色会变一样。选中其他的panel时,之前那个被选中的panel背景色变成正常的就可以了。
请高手指点下迷津……谢谢 --------------------编程问答-------------------- 鼠标操作,mousedown的时候设置背景色。
--------------------编程问答--------------------
谢谢,请问我怎么在选中其他panel的时候把之前选中的那个背景色还原啊? --------------------编程问答-------------------- 今天在家带小孩,没时间给你写例子。你搜索一下
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));
--------------------编程问答-------------------- 学习了
--------------------编程问答--------------------
逍遥哥方便给个例子吗?学习下。 --------------------编程问答--------------------
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#