有没有办法在图片框中的图片上进行点击事件? (这样我就可以点击图片并发生一些事情。) 我试过标签,但很难使用。 谢谢你的帮助。
- 标签代码 -
namespace Today
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private void label1_Click(object sender, EventArgs e)
{
//Code Here
}
}
}
答案 0 :(得分:0)
来自Visual Studio double click
的{{1}}控件上只有PictureBox
的简单答案,以便Visual Studio创建Design View
和Event Handler
它到subscribe
控件的Click Event
。
或者您可以使用编码:
试试这个:
PictureBox
答案 1 :(得分:0)
您可以为Event Handler
的{{1}}事件创建Click
。首先,在构造函数中“订阅”事件:
Picturebox
然后,您可以通过插入以下内容来创建名为 public Form1()
{
InitializeComponent();
pictureBox1.Click += pictureBox1_Click;
}
的方法:
pictureBox1_Click
修改:当您点击 private void pictureBox1_Click(object sender, EventArgs e)
{
//Code
}
内显示的图片时,Click
事件将会触发。或者,您可以订阅PictureBox
或MouseDown
。
答案 2 :(得分:0)
有两种可能性,您的PictureBox
可以显示尺寸小于PictureBox
尺寸的图像,在这种情况下,您希望仅点击矩形图像将触发事件Click
。另一种可能性是当您的图像是透明图像时,例如滚轮?,在这种情况下,仅点击图像的非透明部分将触发事件,换句话说,点击透明区域不会触发事件。下面的代码假设你的情况是后者,它当然比前者更难实现:
public class PictureBoxX : PictureBox
{
static PropertyInfo ImageRectangle;
static PictureBoxX() {
ImageRectangle = typeof(PictureBox).GetProperty("ImageRectangle",
BindingFlags.NonPublic | BindingFlags.Instance);
}
protected override void WndProc(ref Message m)
{
if (m.Msg == 0x202 || m.Msg == 0x201) {
var imageRect = (Rectangle)ImageRectangle.GetValue(this, null);
using (var bm = new Bitmap(imageRect.Width, imageRect.Height,
System.Drawing.Imaging.PixelFormat.Format32bppPArgb))
using(var g = Graphics.FromImage(bm)) {
int x = (int) (m.LParam.ToInt64() & 0xffff) - imageRect.X;
int y = (int) (m.LParam.ToInt64() >> 16) - imageRect.Y;
var rect = imageRect;
rect.Location = Point.Empty;
g.DrawImage(Image, rect);
if (!imageRect.Contains(x, y)) return;
else {
Color c = bm.GetPixel(x, y);
//I choose the threshold 30 for the alpha channel
//the ideal threshold is 0, it's up to you.
if (c.A < 30) return;
}
}
}
base.WndProc(ref m);
}
}
<强>用法强>:
PictureBoxX pic = new PictureBoxX();
pic.Image = someTransparentImage;
pic.Click += (s,e) => {
MessageBox.Show("Clicked on image!");
};
尝试上面的代码,您会看到仅点击图片中不透明的内容会触发Click
事件并显示消息"Clicked on image!"
。请注意,BindingFlags
位于命名空间System.Reflection
中,为方便起见,您可以添加using System.Reflection;
。