zoukankan      html  css  js  c++  java
  • C#实现PictureBox控件的动态添加及在每个图像左上角添加一个复选框

    编程工具:VS2005

    实现方法:

    1、前提,在窗体中添加一个FlowLayoutPanel容器(Name="pnlTest"),用来存放动态添加的PictureBox控件。(注:之所以用FlowLayoutPanel容器,是为了方便图像控件的自动排列,这样就不用算每个图像控件的位置了,嘿嘿~偷个懒)

    2、动态生成PictureBox控件的Code块:

            /// <summary>
            /// 动态添加图像控件
            /// </summary>
            private void AddPicControl()
            {
                PictureBox pic = new PictureBox();
                //设置图像相关属性及事件
                pic.Name = string.Format("pic{0}", this.pnlTest.Controls.Count);//Name属性
                pic.Width = 200; //Size-Width
                pic.Height = 200; //Size-Height
                pic.BorderStyle = BorderStyle.FixedSingle;//边框样式:单线边
                pic.SizeMode = PictureBoxSizeMode.Zoom;//设置图像SizeMode=Zoom
                pic.Cursor = Cursors.Hand;//鼠标悬浮样式:小手
                pic.Click += this.picBox_Click;//事件:单击控件
                pic.DoubleClick += this.picBox_DoubleClick;//事件:双击控件
                this.AddCheckBoxControlIntoPicBox(pic);//添加复选框
                pic.ContextMenuStrip = this.cmsTest;//绑定右键菜单
                //向容器中添加一个图像控件
                this.pnlTest.Controls.Add(pic);
            }

    3、有时候为了实现这样的效果:选择容器内的多张图像并直观的显示已选中的图像。

      之前一直没有找到合适的显示方法,曾用过图像边框样式及颜色来区分,但是效果非常不好。

      后来在某个朋友的提醒下,突然恍然大悟:我可以将图像控件作为一个容器,然后在这个容器上添加一个复选框控件。

      于是,就开始研究起来,下面附上在图像控件中添加复选框控件的Code块:

            /// <summary>
            /// 在图像控件中添加CheckBox控件
            /// </summary>
            private void AddCheckBoxControlIntoPicBox(PictureBox p_PicBox)
            {
                CheckBox chkBox = new CheckBox();
                chkBox.Name = string.Format("chkBoxOf{0}", p_PicBox.Name);
                chkBox.Text = string.Empty;
                chkBox.AutoSize = true;//若不设置此属性,会出现比较多的白色边框,比较难看
                chkBox.Location = new System.Drawing.Point(-1, -1);//相对位置:左上角
    
                p_PicBox.Controls.Add(chkBox);
            }

    小弟才疏学浅,难免会有错误,若您发现了请及时指出,谢谢!

    写此文只为记录编程过程中积攒的思想与经验,若您有更好的思路希望您能给我留言,谢谢啦!~

  • 相关阅读:
    「Poetize10」封印一击
    「Poetize10」能量获取
    vijosP1499炸毁燃料库
    BZOJ3550: [ONTAK2010]Vacation
    总结#3--一类最小割问题
    BZOJ1976: [BeiJing2010组队]能量魔方 Cube
    BZOJ2132: 圈地计划
    BZOJ2127: happiness
    BZOJ1754: [Usaco2005 qua]Bull Math
    920. 会议室
  • 原文地址:https://www.cnblogs.com/ExDevilLee/p/3444153.html
Copyright © 2011-2022 走看看