Color pixelColor=bmp.GetPixel(bmpPoint.X,bmpPoint.Y);其中bmpPoint.X和bmpPoint.Y是鼠标点击处的点的坐标,获取它的方式为PointpictureBoxPoint=pictureBox1.PointToClient(Control.MousePosition);
如果点击的是有色点处则用ContextMenuStrip显示响应信息if(pixelColor.ToArgb().Equals(Color.Blue.ToArgb())||pixelColor.ToArgb().Equals(Color.Green.ToArgb())){ if(e.Button==MouseButton.Left)//鼠标左击时显示 { contextMenuStripLeftClick.Show(System.Windows.Forms.Cursor.Position.X,System.Windows.Forms.Cursor.Position.Y); }}下面是在测试多线程画图时用到的测试代码: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.Threading;
namespace TestThread{ public partial classForm1 : Form { public delegate void UpdateTxt(string info);//为打印声明代理 UpdateTxt updateTxt; public delegate void UpdateBox(stringinfo); UpdateBox updateBox; string contextMenuStripID = ""; public Form1() { InitializeComponent(); }
private void Form1_Load(object sender, EventArgse) { updateTxt= new UpdateTxt(UpdateTxtMethod); updateBox= new UpdateBox(UpdateBoxMethod); Threadtimer = new Thread(new ThreadStart(delegate { PrintTime(); })); timer.IsBackground = true; Threaddrawpicture = new Thread(new ThreadStart(delegate{ DrawPicture(); })); drawpicture.IsBackground = true; timer.Start(); drawpicture.Start(); //Control.CheckForIllegalCrossThreadCalls = false;//跨线程访问控件不安全的做法,通过代理实现 } public void UpdateTxtMethod(string info) { lblTime.Text = info; } public void UpdateBoxMethod(string info) { rtbDataReceived.AppendText(info); rtbDataReceived.ScrollToCaret(); } private void PrintTime() { while(true) { this.BeginInvoke(updateTxt,DateTime.Now.ToString()); Thread.Sleep(1000); } } public string bitMapFileName=@"D:test.bmp"; public int rx=15, ry=15; public void GenerateNewMeter(int x, int y) { Brushmybrush = new SolidBrush(Color.Blue); Bitmap bmp= new Bitmap(356,431); Graphics g= Graphics.FromImage(bmp); g.FillEllipse(mybrush, x+5 , y+5 , 20, 20);
bmp.Save(bitMapFileName); pictureBox1.Load(bitMapFileName); Application.DoEvents(); } int i=0; private void DrawPicture() { while(true) { for (i = 0; i < 100; ++i) { if (i==2||i==4||i==6||i==10) { GenerateNewMeter(rx,ry); rx += 20; ry += 20; } else { this.BeginInvoke(updateBox,"This is"+i.ToString()+"rn"); Thread.Sleep(1000); } } Console.ReadLine(); } }
![多线程中用ContextMenuStrip单击鼠标左键时显示信息 鼠标左键单击失灵](http://img.413yy.cn/images/30101030/30114951t01f70160bf84a3d33f.png)
private voidcontextMenuStripLeftClick_Opening(object sender,CancelEventArgse) {
ToolStripMenuItemID.Text += contextMenuStripID; ToolStripMenuItemIP.Text += "0201001"; ToolStripMenuItemVersionG1.Text += "00000000"; ToolStripMenuItemVersionG2.Text+= "00000001"; }
private void pictureBox1_MouseClick(objectsender, MouseEventArgs e) { PointpictureBoxPoint =pictureBox1.PointToClient(Control.MousePosition); if(pictureBox1.Image != null) { Bitmap bmp = newBitmap(pictureBox1.Image);
double xRadio =((double)bmp.Width) / ((double)pictureBox1.Width); //计算加载在pictureBox上的bmp的比例 double yRadio =((double)bmp.Height) / ((double)pictureBox1.Height); Point bmpPoint = newPoint(); bmpPoint.X =Convert.ToInt32(pictureBoxPoint.X*xRadio); bmpPoint.Y =Convert.ToInt32(pictureBoxPoint.Y*yRadio); contextMenuStripID ="FCFC"; Color piexlColor =bmp.GetPixel(bmpPoint.X,bmpPoint.Y);
if(piexlColor.ToArgb().Equals(Color.Blue.ToArgb())) { if (e.Button==MouseButtons.Right) contextMenuStripLeftClick.Show(System.Windows.Forms.Cursor.Position.X,System.Windows.Forms.Cursor.Position.Y); } } } }}