c# - 以编程方式调用 WinForms contextmenustrip

标签 c# winforms contextmenustrip

我在 c# windows 程序中以编程方式创建一个图片框。我为它分配了 Tag 属性的值。我想以编程方式打印出该标签号,仅用于测试目的。所以我试试这个:

private void Form1_Load(object sender, EventArgs e)
{
    pic.ContextMenuStrip = contextMenuStrip1;
    pic.ContextMenuStrip.Click += new EventHandler(this.MyPicHandler);
}

void MyPicHandler(object sender, EventArgs e)
{
    PictureBox pic = sender as PictureBox;

    MessageBox.Show(pic.Tag.ToString());
}

但是当我右键单击图片,然后单击菜单项时,出现异常。 “未处理 NullReferenceException”“未将对象引用设置为对象的实例。”。有人知道发生了什么事吗?

最佳答案

线

PictureBox pic = sender as PictureBox;

将 pic 设置为 null,因为这是 ContextMenuStrip 的事件处理程序,而不是 PictureBox 的事件处理程序。

sender 参数是对您添加事件处理程序的对象的引用 - 即 ContextMenuStrip

关于c# - 以编程方式调用 WinForms contextmenustrip,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2527804/

相关文章:

c# - ContextMenuStrip 你如何强制更新(大小错误 b/c 我隐藏了它的一些项目)

c# - 使用窗口服务 C# 通过 SMS 远程登录到 Windows pc/laptop

c# - 我们什么时候应该为组件实现带有 IContainer 参数的构造函数?

c# - C# Windows 应用程序中的 PayPal API

c# - 如何从 WinForms 应用程序控制新进程窗口的大小和位置?

c# - 从嵌套的 ToolStripMenuItem 检索时,ContextMenuStrip.Owner 属性为 null

c# - InstallShield LE 1001 错误/在 Windows XP 上安装 Windows 服务

c# - 需要为 ApiControllers 创建约定

c# - 有什么理由在 C# 中编写 "private"关键字吗?

c# - 如何禁用 ContextMenuStrip 中的菜单项?