关于自定义pictureBox点击事件的问题

姑苏画中烟 2014-02-24 01:04:56
我在一个循环里随机定义了几个PictureBox,具体定义的个数呢看循环的次数,然后呢我为每一次定义的pictureBox都定义 pb = new PictureBox();
this.Controls.Add(pb);
pb.BringToFront();
pb.MouseClick += new MouseEventHandler(pb_MouseClick);都给他新指定了一个点击事件,然后把这个循环放在一个时间控件里执行,问题是当我调试把断点加在 pb.MouseClick += new MouseEventHandler(pb_MouseClick);这一行的时候,我点击随机生成的图片就会触发事件,当我不调试,或者调试的时候没有加断点就不触发这个事件?为什么呢?求大神啊啊啊啊!PS:我把 PictureBox pb = null;定义在了时间控件的外面,定义在循环里也没有用。。。
...全文
183 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
姑苏画中烟 2014-02-24
  • 打赏
  • 举报
回复
引用 3 楼 hwenycocodq520 的回复:
定义一次PictureBox就够了啊,改变位置只修改它的Location属性 pb.Location=new Point(x,y);
问题解决了,我把第一次生成的图片保存在一个LIST集合内,然后改这个集合里的数据就OK了,点击事件不出还真的是跟生成了太多的pictureBox有关,感谢你指出的错误,谢谢!
姑苏画中烟 2014-02-24
  • 打赏
  • 举报
回复
引用 6 楼 hwenycocodq520 的回复:
[quote=引用 5 楼 u010051858 的回复:] [quote=引用 4 楼 hwenycocodq520 的回复:]

PictureBox pb = null;
//
Load:
  pb = new PictureBox();
  pb.BringToFront();
  pb.MouseClick += new MouseEventHandler(pb_MouseClick);  
  this.Controls.Add(pb);
//
Tick:
  pb.Location=new Point(x,y);
我获取到的图片最新坐标的来源是要把之前的位置给一个方法,然后这个方法在把新的坐标返回给我[/quote]

//pb.Location=new Point(x,y);
pb.Location=GetNewPosition(pb.Location);
//or
pb.Location=GetNewPosition(pb.Location.X,pb.Location.Y);
[/quote] 而且我是随机生成多个PictureBox,
姑苏画中烟 2014-02-24
  • 打赏
  • 举报
回复
引用 7 楼 hwenycocodq520 的回复:

Point GetNewPosition(Point srcPt);
Point GetNewPosition(int x,int y);
我现在时间控件没走一次,我把以前的图片的进行清空可是还是调试加断点 点击图片才有效果,不调试就不出来。。。 if (lpx.Count!=0) { lpx.Clear(); pb.Controls.Clear(); } lpx是保存界面生成的pictureBox的集合
智商余额不足 2014-02-24
  • 打赏
  • 举报
回复

Point GetNewPosition(Point srcPt);
Point GetNewPosition(int x,int y);
智商余额不足 2014-02-24
  • 打赏
  • 举报
回复
引用 5 楼 u010051858 的回复:
[quote=引用 4 楼 hwenycocodq520 的回复:]

PictureBox pb = null;
//
Load:
  pb = new PictureBox();
  pb.BringToFront();
  pb.MouseClick += new MouseEventHandler(pb_MouseClick);  
  this.Controls.Add(pb);
//
Tick:
  pb.Location=new Point(x,y);
我获取到的图片最新坐标的来源是要把之前的位置给一个方法,然后这个方法在把新的坐标返回给我[/quote]

//pb.Location=new Point(x,y);
pb.Location=GetNewPosition(pb.Location);
//or
pb.Location=GetNewPosition(pb.Location.X,pb.Location.Y);
姑苏画中烟 2014-02-24
  • 打赏
  • 举报
回复
引用 4 楼 hwenycocodq520 的回复:

PictureBox pb = null;
//
Load:
  pb = new PictureBox();
  pb.BringToFront();
  pb.MouseClick += new MouseEventHandler(pb_MouseClick);  
  this.Controls.Add(pb);
//
Tick:
  pb.Location=new Point(x,y);
我获取到的图片最新坐标的来源是要把之前的位置给一个方法,然后这个方法在把新的坐标返回给我
智商余额不足 2014-02-24
  • 打赏
  • 举报
回复

PictureBox pb = null;
//
Load:
  pb = new PictureBox();
  pb.BringToFront();
  pb.MouseClick += new MouseEventHandler(pb_MouseClick);  
  this.Controls.Add(pb);
//
Tick:
  pb.Location=new Point(x,y);
智商余额不足 2014-02-24
  • 打赏
  • 举报
回复
定义一次PictureBox就够了啊,改变位置只修改它的Location属性 pb.Location=new Point(x,y);
姑苏画中烟 2014-02-24
  • 打赏
  • 举报
回复
引用 1 楼 hwenycocodq520 的回复:
为什么要在定时器里面频繁创建PictureBox
每一分钟我的图片位置,我所获取的图片位置从别人的算法里提供,算法每一分钟计算一次
智商余额不足 2014-02-24
  • 打赏
  • 举报
回复
为什么要在定时器里面频繁创建PictureBox
一、实验题目:计算器实验 二、实验目的: 1)熟悉.NET的编程方法,掌握项目的创建与使用及安装; 2)熟悉C#编程语言,字符串使用、自定义类、自定义类库等; 3)熟悉Windows应用程序类编程、事件驱动编程; 三、实验内容: 1)参照Windows提供的计算器工具,设计一个与之类似的程序;另外可参考运行效果下载(计算器Demo程序); 2)基本要求:实现“普通运算”功能,支持连续运算,如连续输入“2+3×5”后点击“等号”按钮进行运算其结果为25. 3)附加要求: A,支持“科学运算”功能,即输入表达式时遵循运算符号的优先原则,连续输入“2+3×5”后点击“等号”按钮进行运算其结果为17; B,支持数字键盘(小键盘)输入功能(焦点不在文本框内时也支持键盘输入); 四、实验方法 经过用户的输入得到数学表达式后,可选择以下方法计算结果: 方法1)不定义"计算类",根据用户输入在程序中直接计算出结果。 方法2)在项目中设计一个计算类(CalculateClass),其中包含“普通计算”和“科学计算”功能,即输入数学运算表达式字符串,返回计算结果。直接在项目中调用该类,输出计算结果。 方法3)在解决方案中增加一个类库(ClassLibrary)项目(在bin\debug下生成dll文件),其中包含计算类(CalculateClass),该类中包含两个方法(普通计算和科学计算),可以根据表达式计算结果。然后在计算器项目中“引用”该类库中的类,输出计算结果; 点评:方法1代码重用性差;方法2代码重用性好,在项目内可方便使用;方法3代码重用性较好,能在不同的项目内重用。 五、实验说明 1)认真分析总结每个“按钮”点击之后的动作(对应的代码); 默认的控件是Button按钮,其实可以用其他支持Click事件的控件替代也行,比如图片控件PictureBox; 2)代码的共享:如数字按钮可以共享一个事件代码; // 参考代码 private void button2_Click(object sender, EventArgs e) { Button objbutton = (Button)sender; label1.Text = "你按了第" + (sender as Button).Tag.ToString() + "个按钮"; } 3)考虑操作性或实用性,如支持退格键、异常输入处理等; 4)为突出实验重点,可以不考虑数制转换、复合运算、括号运算等功能; 5)支持数字小键盘输入时,留意理解窗口的KeyPreview属性,即是否窗口接收键盘事件。另外实现时会涉及到“焦点隐藏”问题,以及按钮的键盘事件等。 敲键盘时发生的事件当然是键盘事件,关键是“窗体”还是“控件”接收键盘事件。如果窗体的KeyPreview设为true,则敲键盘时发生的事件被窗体接收;否则就是控件接收键盘事件。 所谓“焦点隐藏” 是指界面上没有焦点,例如系统提供的计算器。方法一:界面上的控件不获取焦点或者没有焦点(如标签);方法二:将焦点藏在界面上不可见的控件上。 支持数字键盘输入的情形:当焦点在按钮1上时,按数字键2,其使用效果应相当于点击了按钮2。 6)键盘事件KeyPress和KeyDown中e参数包括键盘码; private void KeyBoardForm_KeyPress(object sender, KeyPressEventArgs e) { //KeyPress 不能识别组合键 label1.Text = "你按的键是:" + e.KeyChar; } 7)“麻雀虽小,五脏俱全”,程序很容易出Bug,请认真调试; 8)要想达到界面有特点,不亚于在功能上下功夫。

110,534

社区成员

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

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

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