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);
            }

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

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

  • 相关阅读:
    HashMap源码解析
    如何同时运行两个Tomcat
    Thymeleaf遍历List<Map>和Map<>
    Apache POI详解
    如何管理系统的右键新建菜单
    datatable的dom配置
    如何获取Html的height和width属性(网页宽、高)
    什么是跨域?如何解决跨域问题?
    C# 各类文件扩展名
    C# 接口与抽象类的区别? 什么情景下使用接口,什么情景下使用抽象类?
  • 原文地址:https://www.cnblogs.com/ExDevilLee/p/3444153.html
Copyright © 2011-2022 走看看