*向ContextMenuStrip中添加菜单节点
//Menu控件的属性
private void MenuControl_Attribute() {
this.menu.Items.Clear();
this.menu.Items.Add("相机");
this.menu.Items.Add("运动控制");
this.menu.Items.Add("路径规划");
this.menu.Items.Add("路径库");
}
*向父菜单节点中添加子菜单节点
private void MenuFatherNode_MouseEnter(object sender, EventArgs e)
{
ToolStripItem tsi = sender as ToolStripItem;
string Text = tsi.Text;
if ("相机" == Text)
{
//像菜单节点添加子菜单
ToolStripDropDownItem tsdd = tsi as ToolStripDropDownItem;
tsdd.DropDownItems.Clear();
//检索相机设备
List<string> CamList = Bin.SearchDevice.GetCamDeviceIDs();
if (CamList.Count == 0)
{
//创建子菜单节点
ToolStripItem tsiNew = new ToolStripMenuItem();
tsiNew.Text = "没有检索到相机";
tsiNew.BackColor = Color.Gray;
((ToolStripDropDownItem)tsi).DropDownItems.Add(tsiNew);
}
else
{
foreach (string cam in CamList)
{
//创建子菜单节点
ToolStripItem tsiNew = new ToolStripMenuItem();
tsiNew.Text = cam;
//给子菜单节点绑定事件
tsiNew.Click += MenuChildNode_ClickEvent;
tsdd.DropDownItems.Add(tsiNew);
}
}
}
}
*获取子节点的父节点
private void MenuChildNode_ClickEvent(object sender, EventArgs e) {
ToolStripItem tsi = sender as ToolStripItem;
//获取该节点的父节点名
string FatherNodeName = tsi.OwnerItem.Text;
}
*随鼠标点击位置显示
private void MenuControl_Show(object sender, MouseEventArgs e) {
if (e.Button == MouseButtons.Right)
{
this.menu.Show(e.X, e.Y);
}
}
完整的项目演示:
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private void Form1_Load(object sender, EventArgs e)
{
{//控件加载
MenuControl_Load();
}
{//事件绑定
this.hWindowControl1.MouseDown += MenuControl_Show;
}
}
#region Menu控件
//Menu控件的加载
private void MenuControl_Load() {
MenuControl_Attribute();
MenuControl_BindEvent();
}
//Menu控件的属性
private void MenuControl_Attribute() {
this.menu.Items.Clear();
this.menu.Items.Add("相机");
this.menu.Items.Add("运动控制");
this.menu.Items.Add("路径规划");
this.menu.Items.Add("路径库");
}
//Menu控件绑定的事件
private void MenuControl_BindEvent() {
//给菜单的所有父级节点绑定点击事件
this.menu.Items[0].MouseEnter += MenuFatherNode_MouseEnter;
for (int i = 1; i < this.menu.Items.Count; i++)
{
this.menu.Items[i].Click += MenuFatherNode_ClickEvent;
}
}
//显示Menu控件
private void MenuControl_Show(object sender, MouseEventArgs e) {
if (e.Button == MouseButtons.Right)
{
this.menu.Show(e.X, e.Y);
}
}
//Menu控件的父节点选项点击事件
private void MenuFatherNode_ClickEvent(object sender, EventArgs e) {
ToolStripItem tsi = sender as ToolStripItem;
string Text = tsi.Text;
MessageBox.Show(Text);
}
//Menu控件的父节点选项鼠标移动事件
private void MenuFatherNode_MouseEnter(object sender, EventArgs e)
{
ToolStripItem tsi = sender as ToolStripItem;
string Text = tsi.Text;
if ("相机" == Text)
{
//像菜单节点添加子菜单
ToolStripDropDownItem tsdd = tsi as ToolStripDropDownItem;
tsdd.DropDownItems.Clear();
//检索相机设备
List<string> CamList = Bin.SearchDevice.GetCamDeviceIDs();
if (CamList.Count == 0)
{
ToolStripItem tsiNew = new ToolStripMenuItem();
tsiNew.Text = "没有检索到相机";
tsiNew.BackColor = Color.Gray;
((ToolStripDropDownItem)tsi).DropDownItems.Add(tsiNew);
}
else
{
foreach (string cam in CamList)
{
ToolStripItem tsiNew = new ToolStripMenuItem();
tsiNew.Text = cam;
tsiNew.Click += MenuChildNode_ClickEvent;
tsdd.DropDownItems.Add(tsiNew);
}
}
}
}
//Menu控件的子节点选项点击事件
private void MenuChildNode_ClickEvent(object sender, EventArgs e) {
ToolStripItem tsi = sender as ToolStripItem;
//获取该节点的父节点名
string FatherNodeName = tsi.OwnerItem.Text;
if ("相机" == FatherNodeName)
{
OpenCam((sender as ToolStripItem).Text);
}
}
private void OpenCam(string camID) {
HTuple HWindow = this.hWindowControl1.HalconWindow;
//打开相机连接
HOperatorSet.OpenFramegrabber("MVision", 1, 1, 0, 0, 0, 0, "progressive", 8, "default", -1, "false", "auto", camID, 0, -1, out HTuple camHandle);
HOperatorSet.GrabImageStart(camHandle, -1);
//创建采集线程
Thread newT = new Thread(()=> {
HTuple w, h;
HObject ho_Image;
HOperatorSet.SetColor(HWindow, "green");
while (true)
{
try
{
HOperatorSet.GrabImageAsync(out ho_Image, camHandle, -1);
if (ho_Image != null)
{
HOperatorSet.GetImageSize(ho_Image, out w, out h);
HOperatorSet.SetPart(HWindow, 0, 0, h, w);
HOperatorSet.DispImage(ho_Image, HWindow);
ho_Image.Dispose();
}
}
catch (Exception)
{
}
}
});
newT.Name = camID;
newT.IsBackground = true;
newT.Start();
}
#endregion
}