编程工具: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); }
小弟才疏学浅,难免会有错误,若您发现了请及时指出,谢谢!
写此文只为记录编程过程中积攒的思想与经验,若您有更好的思路希望您能给我留言,谢谢啦!~