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

时间:2020-03-05 18:59:15  来源:igfitidea点击:

我正在以编程方式将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,这样我们就可以进行投射并执行我们需要执行的任何操作。

回答

感谢我们对Andy的帮助。我现在唯一的问题是AutoSize在我要添加的ToolStripButtons上不起作用!他们都太狭窄了。

这很奇怪,因为它可以更早地工作。

更新:通过编程创建的ToolStripButtons的AutoSize绝对存在问题。但是,我找到了一个解决方案:

  • 创建ToolStripButton。
  • 创建一个标签控件并设置字体属性以匹配按钮。
  • 设置标签文本以匹配按钮。
  • 将标签设置为"自动调整大小"。
  • 读取标签的宽度,并使用它来设置ToolStripButton的宽度。

这很hacky,但是可以用。