在圖片上點擊一個區域觸發這個區域的事件


一:效果,放到圖片上會顯示文字,單擊觸發一個事件

二:實現原理

將兩張圖片重合,點擊是另一張圖片,如下圖,根據顏色來判斷點擊的是那個圖片對象

三:代碼

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

       
    }
}

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM