博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
巧用 ToolStripControlHost 自定义WinForm右键菜单
阅读量:5011 次
发布时间:2019-06-12

本文共 1216 字,大约阅读时间需要 4 分钟。

直接入正题, 先看效果图:

 

 

这里实现了两个简单的功能:

1) 自定义了右键菜单,让其中一个选项中显示为一个TextBox加一个Button.

2) 在菜单的TextBox中输入值,点击OK后,将值传到主窗体。

 

 

功能 1),主要就是对ToolStripControlHost类的利用,ToolStripControlHost类实际上就是继承了ToolStripItem类,这个类型也就是ContextMenuStrip中Item的类型,ToolStripControlHost的MSDN中文解释为“承载自定义控件或Windows窗体控件”,也就是相当于一个容器类型的ToolStripItem,利用这个类就可以突破ContextMenuStrip只能默认添加那四个基本控件类型的限制。

功能 2),一个简单的委托操作…

 

步骤:

1. 中间委托类

public class MiddleInvoker
{
public delegate void MyInvoker(string str);
public static MyInvoker invoker;
}

 

2. 添加一个UserControl, 如下:

 

3. UserControl后台主要代码

private void btnOK_Click(object sender, EventArgs e)
{
string strInput = this.txtInput.Text;
MiddleInvoker.invoker.Invoke(strInput);
this.Parent.Hide();
}

 

4. 在主窗体界面中添加button1, contextMenuStrip1, textbox1

5. 在主窗体后台代码中使用ToolStripControlHost类

private void frmMain_Load(object sender, EventArgs e)
{
this.button1.ContextMenuStrip = this.contextMenuStrip1;
UserControl1 uc = new UserControl1();
ToolStripControlHost tsc = new ToolStripControlHost(uc);
this.contextMenuStrip1.Items.Add(tsc);
MiddleInvoker.invoker = new MiddleInvoker.MyInvoker(UpdateValue);
}
 
void UpdateValue(string str)
{
this.textBox1.Text = str;
}

 

Done!

 

 

 

 

 

 

转载于:https://www.cnblogs.com/xiangdejun/archive/2013/03/12/2954933.html

你可能感兴趣的文章
NRF51822配对绑定要点
查看>>
C语言博客作业—数据类型
查看>>
Python封装与隐藏
查看>>
[leetcode]Count and Say
查看>>
cookie、session和token的概念入门
查看>>
保护网站页面内容+版权
查看>>
Golang模拟客户端POST表单功能文件上传
查看>>
重启进程
查看>>
js 进度条效果
查看>>
RelativeLayout
查看>>
2014 10 07 ················男人感悟100(转自MOP)
查看>>
安卓开发之生成cache目录和files目录
查看>>
PHP 文件上传功能
查看>>
Spring源码解析(一)开篇
查看>>
开发流程
查看>>
【python】详解类class的方法:实例方法、类方法、静态方法(三)
查看>>
01_博客园的定制
查看>>
配置主页
查看>>
简单DP 01 背包 饭卡HDU 2546 ( 饭卡 ) 不知道算不算是稍稍加了点贪心的思想~...
查看>>
java工具方法
查看>>