C# WinForms菜单Toolstrip获取状态

C# WinForms菜单Toolstrip获取状态,c#,winforms,visibility,toolstrip,C#,Winforms,Visibility,Toolstrip,所以我有一个项目,通过一些自动创建为全局变量的类进行一些自动初始化(是的,它们是静态实例)。在这一点上(它与用户的C#GUI没有关系,因此它不是从任何C#类派生的),我需要查看是否设置了标志 我使用状态为选中和未选中的toolstrip菜单来设置或取消设置标志。问题是,我很难看到是否从这个静态类中检查标志。我的类位于不同的项目/命名空间中,创建了一个DLL,该DLL稍后链接到应用程序的GUI。GUI依赖于此管理器类,因此使管理器类依赖于GUI不是一个选项。尽管如此,我应该能够看到它的国家知道它的

所以我有一个项目,通过一些自动创建为全局变量的类进行一些自动初始化(是的,它们是静态实例)。在这一点上(它与用户的C#GUI没有关系,因此它不是从任何C#类派生的),我需要查看是否设置了标志

我使用状态为选中和未选中的toolstrip菜单来设置或取消设置标志。问题是,我很难看到是否从这个静态类中检查标志。我的类位于不同的项目/命名空间中,创建了一个DLL,该DLL稍后链接到应用程序的GUI。GUI依赖于此管理器类,因此使管理器类依赖于GUI不是一个选项。尽管如此,我应该能够看到它的国家知道它的名字或通过其他方式。我尝试了以下方法:

if(Application.OpenForms[0].Owner.Controls["_useLocalImageForInitToolStripMenuItem"].Enabled)
{  };
现在的问题是,在上面的代码片段中,我遇到了一个严重的错误。那我该怎么做呢

toolstrip菜单:

错误:

有关详细信息,请参阅此消息的结尾 有关调用准时制的详细信息 (JIT)调试而不是此对话框 盒子

**************异常文本*************System.ArgumentOutOfRangeException: 索引超出范围。必须是 非负数且小于 收藏。参数名称:索引 在 System.Collections.ArrayList.get_项(Int32 索引)在 System.Windows.Forms.FormCollection.get_项(Int32 索引)在 Manager.MyMainManager.MyMainManager.RealTimeInit() 在C:\Dropbox\My中 Dropbox\Public\Program Code\RoboCup\Manager\MyMainManager\MyMainManager.cs:line 494 at mainApp.MainForm.ButtonInitClick(对象 C:\Dropbox\My中的发件人、事件参数(e) Dropbox\Public\Program Code\RoboCup\mainApp\MainForm.cs:line 389 at System.Windows.Forms.Control.OnClick(EventArgs e) 在 System.Windows.Forms.Button.OnClick(EventArgs e) 在 System.Windows.Forms.Button.OnMouseUp(MouseEventArgs mevent)在 System.Windows.Forms.Control.WmMouseUp(消息& m、 鼠标按钮按钮,Int32点击) 在 System.Windows.Forms.Control.WndProc(消息& m) 在 System.Windows.Forms.ButtonBase.WndProc(消息& m) 在 System.Windows.Forms.Button.WndProc(消息& m) 在 System.Windows.Forms.Control.ControlNativeWindow.OnMessage(消息& m) 在 System.Windows.Forms.Control.ControlNativeWindow.WndProc(消息& m) 在 System.Windows.Forms.NativeWindow.Callback(IntPtr hWnd、Int32 msg、IntPtr wparam、IntPtr (内存)

使用
private System.Windows.Forms.ToolStripMenuItem\u使用Localimageforinittoolstripmenuitem

this._useLocalImageForInitToolStripMenuItem.CheckState = System.Windows.Forms.CheckState.Checked;
                    this._useLocalImageForInitToolStripMenuItem.Name = "_useLocalImageForInitToolStripMenuItem";
                    this._useLocalImageForInitToolStripMenuItem.Size = new System.Drawing.Size(242, 22);
                    this._useLocalImageForInitToolStripMenuItem.Text = "Use local image for Initialization";
                    this._useLocalImageForInitToolStripMenuItem.Click += new System.EventHandler(this.

考虑一种自上而下的方法,而不是自下而上的方法。当GUI值更改时,让GUI在settings类中设置值,而不是让settings类从GUI中读取值。我在自己的应用程序中使用了类似的方法,并且我的设置类有一个public
ReloadValues()
方法,如果我对备份数据存储进行更改,可以调用该方法。

好的,我设法做了我想要的事情,但是它看起来不太好,因为对菜单路径的任何修改都会导致功能失效

var alfa = ((((Application.OpenForms[0].Controls["_menustripMenu"] 
                                             as System.Windows.Forms.MenuStrip).
                 Items["_settingsToolStripMenuItem"] 
                                      as System.Windows.Forms.ToolStripMenuItem).
                 DropDownItems["_cameraToolStripMenuItem"] 
                                      as System.Windows.Forms.ToolStripMenuItem).
                 DropDownItems["_useLocalImageForInitToolStripMenuItem"] 
                              as System.Windows.Forms.ToolStripMenuItem).Checked;

有清洁剂吗

你能复制你收到的错误信息吗?我稍后会发布错误信息,因为我无法在我的笔记本电脑上重现问题,我需要进入办公室,但基本上是一个令人讨厌的未处理异常,有点抱怨他找不到。我不确定我是否明白你的意思。我有两个问题。如何从项目中查看设置类?更改已经生效,只是不确定如何查看项目中的当前值。你能再详细一点吗?目前你是如何将设置类/库公开给项目的其余部分的?现在我根本不公开它,只有主应用程序可以看到它。