为了解决panel上绘制image时没有滚动条的问题,将绘制image改为动态生成多个PictureBox控件,原来判断Click是根据点击的位置,现在使用控件如何响应,网上也有相同问题的解答如下:
事件通过公用的函数来实现的,使picturebox的Click+=new EventHandler(pic_Click);
设置PictureBox的Name,响应事件中把参数sender转化为PictureBox类型,然后得到其Name等,就可以判断哪个控件被Click了
private int count = 0;
private void CreatePictureBox(Control parent, string imgfile, int x, int y, int w, int h)
{
PictureBox pic = new PictureBox();
pic.Location = new Point(x, y); // 设定位置
pic.Size = new Size( w, h); // 设定宽高
pic.Name = imgfile + count; // 用图文件名称加流水号当作控件的名称
pic.Image = new Bitmap(imgfile); // 读取图文件,显示在pictureBox
pic.Parent = parent; // 设定控件的的Parent,功能类似this.Controls.Add(pictureBox1);
pic.Click += new EventHandler(pic_Click); // 设定所有的PictureBox的Click事件都呼叫相同的事件函数
}
/// <summary>
/// 这个是PictureBox.Click的事件函式,
/// 所有动态产生的PictureBox在Click的时候,都会呼叫此事件
/// </summary>
/// <param name="sender">代表目前click的pictureBox对象</param>
/// <param name="e"></param>
void pic_Click(object sender, EventArgs e)
{
// 将sender转型成PictureBox
PictureBox pic = sender as PictureBox;
if (null == pic) return;
string name = pic.Name; // 取出pictureBox的名称
// 以下就你读取到的名称去处理你要做的事情
}