图片GUI C#(使用图片框)

时间:2013-12-03 03:08:10

标签: c# user-interface graphics picturebox

有没有办法在图片框中的图片上进行点击事件? (这样我就可以点击图片并发生一些事情。) 我试过标签,但很难使用。 谢谢你的帮助。

- 标签代码 -

namespace Today
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        private void label1_Click(object sender, EventArgs e)
        {
            //Code Here
        }
    }
}

3 个答案:

答案 0 :(得分:0)

来自Visual Studio double click的{​​{1}}控件上只有PictureBox的简单答案,以便Visual Studio创建Design ViewEvent 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事件将会触发。或者,您可以订阅PictureBoxMouseDown

答案 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;