【问题标题】:calling WinForms contextmenustrip programmatically以编程方式调用 WinForms contextmenustrip
【发布时间】:2011-02-01 10:30:08
【问题描述】:

我在 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”“未将对象引用设置为对象的实例。”。有人知道发生了什么吗?

【问题讨论】:

    标签: c# winforms contextmenustrip


    【解决方案1】:

    线

    PictureBox pic = sender as PictureBox;
    

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

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

    【讨论】:

      【解决方案2】:

      看起来 pic.Tag 为空,因此 .ToString 正在强制异常。你应该这样做:

      if(pic.Tag != null)
          MessageBox.Show(pic.Tag.ToString());
      

      确保您在某处设置标签,例如在 Form1_Load 中:

      pic.Tag = someValue;
      

      【讨论】:

      • 之前,我手动将值放在属性窗口中。现在,我以编程方式尝试了它,同样的事情。我仍然收到错误
      • 查看 John Saunders 的帖子。他有正确的理由。
      猜你喜欢
      • 1970-01-01
      • 2018-11-14
      • 2010-11-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-04-27
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多