在图片上点击一个区域触发这个区域的事件

一:效果,放到图片上会显示文字,单击触发一个事件

二:实现原理

将两张图片重合,点击是另一张图片,如下图,根据颜色来判断点击的是那个图片对象

三:代码

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.IO;

namespace image
{
    public partial class Form1 : Form
    {
        Bitmap showBm;      //原始图片
        Bitmap hideBm;     //参考图片

        Label lbInfo;//标签

        public Form1()
        {
            InitializeComponent();
            this.pictureBox1.SizeMode = PictureBoxSizeMode.AutoSize;
            this.pictureBox1.BorderStyle = BorderStyle.None;
            this.pictureBox1.Location = new Point(0, 0);
        }

        #region 运行加载事件
        private void Form1_Load(object sender, EventArgs e)
        {
          


            showBm = (Bitmap)global::image.Properties.Resources.ResourceManager.GetObject("show");//得到图片
            hideBm = (Bitmap)global::image.Properties.Resources.ResourceManager.GetObject("hide");
            pictureBox1.Image = showBm;
            //this.Width = pictureBox1.Width + (this.Bounds.Width - this.ClientSize.Width);//窗体的宽度

            lbInfo = new Label();
            this.Controls.Add(lbInfo);//在form中加一个lable
            lbInfo.Parent = pictureBox1;//在picturebox范围内才能显示这个label(需要指定控件显示位置,如果没有就不显示)
            lbInfo.BackColor = Color.FromArgb(150, 0, 0, 0);//背景色(透明度,0,0,0)
            lbInfo.ForeColor = Color.White;//前景色
            lbInfo.TextAlign = ContentAlignment.MiddleCenter;//文字布局,中间显示


        }
        #endregion

        #region 鼠标移动事件
        private void pic_Dh_MouseMove(object sender, MouseEventArgs e)
        {
            try
            {
                if (e.X <= 1010 && e.Y <= 630)//图片大小
                {
                    Color clr = hideBm.GetPixel(e.X, e.Y); //获取在参考图对应坐标像素点的颜色信息
                    if (clr.ToArgb() != Color.Black.ToArgb())//比较argb颜色值设置文本显示
                    {
                        this.Cursor = Cursors.Hand;//设置手形      
                        if (clr.ToArgb() == Color.FromArgb(255, 254, 0, 0).ToArgb())//对颜色进行判断
                            lbInfo.Text = "春光油田";
                        else if (clr.ToArgb() == Color.FromArgb(255, 200, 160, 0).ToArgb())
                            lbInfo.Text = "本布图油田";
                        else if (clr.ToArgb() == Color.FromArgb(255, 0, 200, 50).ToArgb())
                            lbInfo.Text = "宝浪油田";
                        else if (clr.ToArgb() == Color.FromArgb(255, 220, 255, 151).ToArgb())
                            lbInfo.Text = "双河油田";
                        else if (clr.ToArgb() == Color.FromArgb(255, 255, 192, 63).ToArgb())
                            lbInfo.Text = "下二门油田";
                        else if (clr.ToArgb() == Color.FromArgb(255, 113, 250, 255).ToArgb())
                            lbInfo.Text = "魏岗油田";
                        else if (clr.ToArgb() == Color.FromArgb(255, 1, 139, 61).ToArgb())
                            lbInfo.Text = "赵凹油田";
                        else if (clr.ToArgb() == Color.FromArgb(255, 255, 83, 97).ToArgb())
                            lbInfo.Text = "张店油田";
                        else if (clr.ToArgb() == Color.FromArgb(255, 90, 220, 160).ToArgb())
                            lbInfo.Text = "北马庄油田";
                        else if (clr.ToArgb() == Color.FromArgb(255, 254, 0, 246).ToArgb())
                            lbInfo.Text = "东庄油田";
                        else if (clr.ToArgb() == Color.FromArgb(255, 118, 146, 255).ToArgb())
                            lbInfo.Text = "井楼油田";
                        else if (clr.ToArgb() == Color.FromArgb(255, 20, 10, 109).ToArgb())
                            lbInfo.Text = "古城油田";
                        else if (clr.ToArgb() == Color.FromArgb(255, 134, 178, 29).ToArgb())
                            lbInfo.Text = "新庄油田";
                        else if (clr.ToArgb() == Color.FromArgb(255, 1, 155, 163).ToArgb())
                            lbInfo.Text = "王集油田";
                        else if (clr.ToArgb() == Color.FromArgb(255, 0, 140, 101).ToArgb())
                            lbInfo.Text = "杨楼油田";
                        else if (clr.ToArgb() == Color.FromArgb(255, 128, 119, 0).ToArgb())
                            lbInfo.Text = "付湾油田";
                        else if (clr.ToArgb() == Color.FromArgb(255, 154, 0, 182).ToArgb())
                            lbInfo.Text = "杜坡油田";
                        else
                            lbInfo.Text = "有待开发";
                    }
                    else
                    {
                        pictureBox1.Cursor = Cursors.Arrow;
                        lbInfo.Text = "有待开发";
                    }
                    //设置label位置
                    if (e.X + 20 + lbInfo.Width >= pictureBox1.Width)
                        lbInfo.Left = e.X - 20 - lbInfo.Width;
                    else
                        lbInfo.Left = e.X + 20;
                    if (e.Y + 20 + lbInfo.Height >= pictureBox1.Height)
                        lbInfo.Top = e.Y - 20 - lbInfo.Height;
                    else
                        lbInfo.Top = e.Y + 20;
                }
            }
            catch
            {
                MessageBox.Show(e.X.ToString() + "," + e.Y.ToString());
            }
        }
        #endregion

        #region 鼠标单击事件
        private void pic_Dh_Click(object sender, EventArgs e)
        {
            switch (lbInfo.Text)
            {
                case "春光油田":
                    //ConstInfo.Yt_Name = lbInfo.Text;
                    //数据成图ToolStripMenuItem_Click(sender, e);//可触发一个菜单栏事件
                    MessageBox.Show("");
                    break;
                case "本布图油田":
                    MessageBox.Show("");
                    break;
                case "宝浪油田":
                    MessageBox.Show("");
                    break;
                case "双河油田":
                    MessageBox.Show("");
                    break;
                case "下二门油田":
                    MessageBox.Show("");
                    break;
                case "魏岗油田":
                    MessageBox.Show("");
                    break;
                case "赵奥油田":
                    MessageBox.Show("");
                    break;
                case "张店油田":
                    MessageBox.Show("");
                    break;
                case "北马庄油田":
                    MessageBox.Show("");
                    break;
                case "东庄油田":
                    MessageBox.Show("");
                    break;
                case "井楼油田":
                    MessageBox.Show("");
                    break;
                case "古城油田":
                    MessageBox.Show("");
                    break;
                case "新庄油田":
                    MessageBox.Show("");
                    break;
                case "王集油田":
                    MessageBox.Show("");
                    break;
                case "杨楼油田":
                    MessageBox.Show("");
                    break;
                case "付湾油田":
                    MessageBox.Show("");
                    break;
                case "杜坡油田":
                    MessageBox.Show("");
                    break;
                case "有待开发":
                    //ConstInfo.Yt_Name = lbInfo.Text;
                    //成果管理ToolStripMenuItem_Click(sender, e);
                    break;
            }
        }
        #endregion

       
    }
}

 

posted @ 2015-02-04 09:43  HongMaJu  阅读(4165)  评论(0编辑  收藏  举报