【发布时间】:2021-04-18 22:15:23
【问题描述】:
我有 19 个菜单项的共享事件处理程序,标记为“1”到“19”,对应的标记值为 1 到 19:
// This event handler is shared by all 19 zoom level menu items
private void toolStripMenuItem_ZoomLevel1_Click(object sender, EventArgs e)
{
//int zoomLevel = sender.Tag; // "object does not contain a definition for tag"
//int zoomLevel = Convert.ToInt32(sender.Tag); // " "
//int zoomLevel = (sender as toolStripMenuItem).Tag; // type or namespace 'toolStripMenuItem' could not be found
//int zoomLevel = (sender as MenuItem).Tag; // "cannot implicitly convert object to int"
int zoomLevel = Convert.ToInt32((sender as MenuItem).Tag);
this.userControl11.myMap.ZoomLevel = zoomLevel;
}
但是,在运行时,当我选择这些菜单项之一时,我得到一个空引用:“对象引用未设置为对象的实例”
菜单项(发送者)显然是存在的,并且它有一个标签值。这里什么是空?
更新
使用建议的代码:
this.userControl11.myMap.ZoomLevel = (int)((ToolStripMenuItem)sender).Tag;
...我在运行时得到“Specified cast is not valid”。
“故事的其余部分”/血腥细节是:
System.InvalidCastException HResult=0x80004002 消息=指定 演员表无效。来源=MyMaps StackTrace:在 MyMaps.Form1.toolStripMenuItem_ZoomLevel1_Click(对象发送者, EventArgs e) 在 C:\Users\bclay\source\repos\MyMaps\MyMaps\Form1.cs:第 138 行 System.Windows.Forms.ToolStripItem.RaiseEvent(对象键,EventArgs e) 在 System.Windows.Forms.ToolStripMenuItem.OnClick(EventArgs e) 在 System.Windows.Forms.ToolStripItem.HandleClick(EventArgs e) 在 System.Windows.Forms.ToolStripItem.HandleMouseUp(MouseEventArgs e)
在 System.Windows.Forms.ToolStripItem.FireEventInteractive(EventArgs e、ToolStripItemEventType)在 System.Windows.Forms.ToolStripItem.FireEvent(EventArgs e, ToolStripItemEventType 遇到)在 System.Windows.Forms.ToolStrip.OnMouseUp(MouseEventArgs mea) 在 System.Windows.Forms.ToolStripDropDown.OnMouseUp(MouseEventArgs mea)
在 System.Windows.Forms.Control.WmMouseUp(消息和 m,鼠标按钮 按钮,Int32 点击)在 System.Windows.Forms.Control.WndProc(Message& m) 在 System.Windows.Forms.ScrollableControl.WndProc(Message& m) 在 System.Windows.Forms.ToolStrip.WndProc(Message& m) 在 System.Windows.Forms.ToolStripDropDown.WndProc(Message& m) 在 System.Windows.Forms.Control.ControlNativeWindow.OnMessage(消息& m) 在 System.Windows.Forms.Control.ControlNativeWindow.WndProc(消息& m) 在 System.Windows.Forms.NativeWindow.DebuggableCallback(IntPtr hWnd, Int32 msg, IntPtr wparam, IntPtr lparam) 在 System.Windows.Forms.UnsafeNativeMethods.DispatchMessageW(味精和味精)
在 System.Windows.Forms.Application.ComponentManager.System.Windows.Forms.UnsafeNativeMethods.IMsoComponentManager.FPushMessageLoop(IntPtr dwComponentID,Int32 原因,Int32 pvLoopData)在 System.Windows.Forms.Application.ThreadContext.RunMessageLoopInner(Int32 原因,ApplicationContext 上下文)在 System.Windows.Forms.Application.ThreadContext.RunMessageLoop(Int32 原因,ApplicationContext 上下文)在 System.Windows.Forms.Application.Run(Form mainForm) 在 MyMaps.Program.Main() 在 C:\Users\bclay\source\repos\MyMaps\MyMaps\Program.cs:19 行
【问题讨论】:
标签: c# .net wpf winforms bing-maps