C# 自定义控件,怎么加上选中时的效果

小仙女&& 2019-05-30 10:13:48
类似于按钮选中时颜色会变化
...全文
469 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
The_Smile 2019-05-31
  • 打赏
  • 举报
回复
引用
有多个控件,怎么做到点击这个,然后点击另外的时候上个选中消失呢
panel中多个picturebox 红边框代表选中 黑边框代表未选中

private void Init()
        {
            foreach (var item in panel1.Controls)
            {
                if(item.GetType()==typeof(PictureBox))
                {
                    PictureBox picture = (PictureBox)item;
                    picture.Paint += new PaintEventHandler(picturePaint);
                    picture.Click += new EventHandler(pictureClick);

                    pictureColorDic.Add(picture, Color.Black);
                }
            }
        }

        private Dictionary<PictureBox, Color> pictureColorDic = new Dictionary<PictureBox, Color>();

        void picturePaint(object sender, PaintEventArgs e)
        {
            var pictureControl = (sender as PictureBox);

            var color = pictureColorDic.FirstOrDefault(a => a.Key == pictureControl).Value;
            if (color == null) { return; }

            ControlPaint.DrawBorder(e.Graphics, pictureControl.ClientRectangle,
                color, 1, ButtonBorderStyle.Solid,
                color, 1, ButtonBorderStyle.Solid,
                color, 1, ButtonBorderStyle.Solid,
                color, 1, ButtonBorderStyle.Solid);

        }

        void pictureClick(object sender, EventArgs e)
        {
            var pictureControl = (sender as PictureBox);

            var dic = pictureColorDic.FirstOrDefault(a => a.Key == pictureControl);
            if (dic.Key != null)
            {
                pictureColorDic.Remove(pictureControl);
                if (dic.Value == Color.Black)
                {
                    pictureColorDic.Add(pictureControl, Color.Red);
                }
                else
                {
                    pictureColorDic.Add(pictureControl, Color.Black);
                }
            }
            pictureControl.Invalidate();
            pictureControl.Update();
        }
猫爪子挠 2019-05-30
  • 打赏
  • 举报
回复
利用鼠标进入该控件事件来改变背景颜色,当鼠标移除该控件取消背景颜色;
小仙女&& 2019-05-30
  • 打赏
  • 举报
回复
引用 1 楼 耗子哭死猫 的回复:
自定义什么了?lable textbox gridview combobox?
自定义了一个控件,控件里面包含Panel PictureBox,label
耗子哭死猫 2019-05-30
  • 打赏
  • 举报
回复
自定义什么了?lable textbox gridview combobox?
小仙女&& 2019-05-30
  • 打赏
  • 举报
回复
引用 4 楼 The丶End 的回复:

private Color pictureBoxBorderColor = Color.Black;

        private void pictureBox1_Paint(object sender, PaintEventArgs e)
        {
            ControlPaint.DrawBorder(e.Graphics,
                                this.pictureBox1.ClientRectangle,
                                pictureBoxBorderColor, 1, ButtonBorderStyle.Solid,
                                pictureBoxBorderColor, 1, ButtonBorderStyle.Solid,
                                pictureBoxBorderColor, 1, ButtonBorderStyle.Solid,
                                pictureBoxBorderColor, 1, ButtonBorderStyle.Solid);
        }

        private void pictureBox1_Click(object sender, EventArgs e)
        {
            if (pictureBoxBorderColor == Color.Black)
            {
                pictureBoxBorderColor = Color.Red;
            }
            else
            {
                pictureBoxBorderColor = Color.Black;
            }
            pictureBox1.Invalidate();
            pictureBox1.Update();
        }
有多个控件,怎么做到点击这个,然后点击另外的时候上个选中消失呢
The_Smile 2019-05-30
  • 打赏
  • 举报
回复

private Color pictureBoxBorderColor = Color.Black;

        private void pictureBox1_Paint(object sender, PaintEventArgs e)
        {
            ControlPaint.DrawBorder(e.Graphics,
                                this.pictureBox1.ClientRectangle,
                                pictureBoxBorderColor, 1, ButtonBorderStyle.Solid,
                                pictureBoxBorderColor, 1, ButtonBorderStyle.Solid,
                                pictureBoxBorderColor, 1, ButtonBorderStyle.Solid,
                                pictureBoxBorderColor, 1, ButtonBorderStyle.Solid);
        }

        private void pictureBox1_Click(object sender, EventArgs e)
        {
            if (pictureBoxBorderColor == Color.Black)
            {
                pictureBoxBorderColor = Color.Red;
            }
            else
            {
                pictureBoxBorderColor = Color.Black;
            }
            pictureBox1.Invalidate();
            pictureBox1.Update();
        }

110,534

社区成员

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

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

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