如何在 Bing 地图上设置缩放级别?

Posted

技术标签:

【中文标题】如何在 Bing 地图上设置缩放级别?【英文标题】:How can I set the Zoom Level on my Bing Map? 【发布时间】: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 行

【问题讨论】:

【参考方案1】:

根据您的事件处理程序的名称,我假设您正在处理ToolStrioMenuItem 的点击事件,因此您需要将发件人转换为ToolStripMenuItem

如果您不确定类型,请转到设计器并单击您正在处理其单击事件的控件/项目并查看属性并检查下拉列表中属性窗口顶部的对象类型,并在投射发件人时使用该类型:

//To make it a bit more readable:
var item = (ToolStripMenuItem)sender;
var tag = item.Tag;
var value = Convert.ToInt32(tag);
this.userControl11.myMap.ZoomLevel = value;

//Or in a single line:
this.userControl11.myMap.ZoomLevel = Convert.ToInt32(((ToolStripMenuItem)sender).Tag);

这是您其余尝试的问题:

int zoomLevel = sender.Tag;

事件处理程序的 sender 参数是对象类型,object 没有 Tag 属性。

int zoomLevel = Convert.ToInt32(sender.Tag);

同上。

int zoomLevel = (sender as toolStripMenuItem).Tag;

错字! toolStripMenuItem 应该是 ToolStripMenuItem

int zoomLevel = (sender as MenuItem).Tag;

ToolStripMenuItem 不能从 MenuItem 驱动/不能转换为 MenuItem,因此当您尝试使用 as 运算符将其转换为 MenuItem 时,结果为 null,并尝试获取 null 标记,将导致对象空引用异常。

【讨论】:

我得到,“指定的演员阵容无效”;请参阅更新 @B.ClayShannon 我根据事件处理程序的名称猜测:toolStripMenuItem_ZoomLevel1_Click。转到设计器并单击您正在处理其单击事件的控件并查看属性。对象的类型是什么? (在下拉属性窗口的顶部) 对一个错误很抱歉,你不应该把它转换成 int 你应该使用 int.parse 或 convert.toint32

以上是关于如何在 Bing 地图上设置缩放级别?的主要内容,如果未能解决你的问题,请参考以下文章

当只有一个图钉时,如何确定 Bing 地图的正确缩放级别?

如何使用 PHP 将 Bing 地图四键转换为缩放级别、x 坐标和 y 坐标?

如何根据标记位置设置谷歌地图的缩放级别

如何设置谷歌地图缩放级别以显示所有标记?

如何设置地图视图的缩放级别,使三个引脚可见?

如何在谷歌地图中设置缩放级别