如何以编程方式在C#中连接ToolStripButton事件?

我是以编程方式将ToolStripButton项添加到上下文菜单中。

那部分很容易。

this.tsmiDelete.DropDownItems.Add("The text on the item."); 

但是,我还需要连接事件,以便当用户点击该项时实际发生的事情!

我该怎么做呢? 处理点击的方法还需要接收某种与用户点击的特定ToolStripButton相关的id或对象。

难道你不能订阅Click事件吗? 像这样的东西:

 ToolStripButton btn = new ToolStripButton("The text on the item."); this.tsmiDelete.DropDownItems.Add(btn); btn.Click += new EventHandler(OnBtnClicked); 

并且OnBtnClicked将被声明为:

 private void OnBtnClicked(object sender, EventArgs e) { ToolStripButton btn = sender as ToolStripButton; // handle the button click } 

发件人应该是ToolStripButton,因此您可以投射它并做任何您需要做的事情。

谢谢你对安迪的帮助。 我现在唯一的问题是AutoSize不能处理我正在添加的ToolStripButtons! 他们太狭隘了。

这很奇怪,因为它工作得更早。


更新:对于以编程方式创建的ToolStripButtons,AutoSize肯定存在问题。 但是,我找到了一个解决方案:

  1. 创建ToolStripButton。
  2. 创建标签控件并设置字体属性以匹配您的按钮。
  3. 设置标签的文本以匹配您的按钮。
  4. 将标签设置为AutoSize。
  5. 读取标签的宽度并使用它来设置ToolStripButton的宽度。

这很hacky,但它确实有效。