gpt4 book ai didi

winforms - 为什么 WinForm 设计器显示消息 "Value cannot be null. Parameter name: context"?

转载 作者:行者123 更新时间:2023-12-03 14:40:31 27 4
gpt4 key购买 nike

我有一个 c# Windows 窗体应用程序,使用 .NET 3.5。

我的机器环境如下:

  • Visual Studio 2010 高级版,SP1
  • Windows 7 专业版,SP1
  • 32 位处理器

  • 我有一个 用户控件 - 派生自定义控件,包含一些其他用户控件。

    我在 Visual Studio 的 Windows 窗体设计器中调出主 UserControl,然后我开始单击各种嵌入的 UserControl 并随机更改一些属性,例如 正文 .然后我点击 保存 工具栏按钮。然后我继续对控件的属性进行更多更改,然后单击 保存 .

    在某个时间点(这是不可预测的)之后,Visual Studio 将显示一个错误对话框。

    WinForms 设计器显示一个模态对话框,标题为“ Microsoft Visual Studio ”,以及一条两行消息“ 值不能为空。参数名称:上下文”和一个确定按钮。

    不幸的是,在单击“确定”按钮关闭此对话框后,Visual Studio 现在损坏了我的表单设计器生成的代码。恢复我的代码的唯一方法是从备份文件。

    我发现的唯一解决方法是设置 可本地化 用于 中的 UserControl属性 window 。这不是一个长期的解决方法,因为我需要在我们的生产代码中将此 UserControl 本地化。

    我的项目相当简单,没有网络服务等。

    我已经尝试使用 Visual Studio 的另一个实例进行调试,以查看是否可以捕获任何异常,但没有生成任何异常。没有任何重要的调试输出。

    有没有其他人看到过这个问题?寻找建议。

    更多信息...

    我能够成功附加 Visual Studio 的第二个实例并确定确实抛出了异常。 (我不得不取消选中“Just My Code”调试选项,并启用符号服务器等)。

    显然,当我点击 保存 在 WinForm 设计器中,一个 System.ArgumentNullException 发生在 System.dll , 在方法 System.ComponentModel.Design.Serialization.ContextStack.Push(对象上下文) .所以, 上下文 参数为空,这就是问题所在。仍然不知道为什么会发生这种情况。

    这是堆栈跟踪:

    System.dll!System.ComponentModel.Design.Serialization.ContextStack.Push(object context) + 0x88 bytes
    System.Design.dll!System.ComponentModel.Design.Serialization.ResourceCodeDomSerializer.ApplyCacheEntry(System.ComponentModel.Design.Serialization.IDesignerSerializationManager manager = {System.ComponentModel.Design.Serialization.DesignerSerializationManager}, System.ComponentModel.Design.Serialization.ComponentCache.Entry entry) + 0x10e bytes
    System.Design.dll!System.ComponentModel.Design.Serialization.ComponentCodeDomSerializer.Serialize(System.ComponentModel.Design.Serialization.IDesignerSerializationManager manager = {System.ComponentModel.Design.Serialization.DesignerSerializationManager}, object value = {ReveilleSystem.UserInterface.BoldLabel}) + 0xf64 bytes
    System.Design.dll!System.Windows.Forms.Design.ControlCodeDomSerializer.Serialize(System.ComponentModel.Design.Serialization.IDesignerSerializationManager manager = {System.ComponentModel.Design.Serialization.DesignerSerializationManager}, object value = {ReveilleSystem.UserInterface.BoldLabel}) + 0x83 bytes
    System.Design.dll!System.ComponentModel.Design.Serialization.CodeDomSerializerBase.SerializeToExpression(System.ComponentModel.Design.Serialization.IDesignerSerializationManager manager = {System.ComponentModel.Design.Serialization.DesignerSerializationManager}, object value = {ReveilleSystem.UserInterface.BoldLabel}) + 0x173 bytes
    System.Design.dll!System.ComponentModel.Design.Serialization.TypeCodeDomSerializer.Serialize(System.ComponentModel.Design.Serialization.IDesignerSerializationManager manager = {System.ComponentModel.Design.Serialization.DesignerSerializationManager}, object root = {ReveilleSystem.UserInterface.WizardEditors.EditorBase}, System.Collections.ICollection members = {System.ComponentModel.ComponentCollection}) + 0x195 bytes
    System.Design.dll!System.ComponentModel.Design.Serialization.CodeDomDesignerLoader.PerformFlush(System.ComponentModel.Design.Serialization.IDesignerSerializationManager manager = {System.ComponentModel.Design.Serialization.DesignerSerializationManager}) + 0x7e bytes
    System.Design.dll!System.ComponentModel.Design.Serialization.BasicDesignerLoader.Flush() + 0x111 bytes
    Microsoft.VisualStudio.Design.dll!Microsoft.VisualStudio.Design.Serialization.CodeDom.VSCodeDomDesignerLoader.Flush() + 0xa0 bytes
    System.Design.dll!System.ComponentModel.Design.DesignSurface.Flush() + 0x21 bytes
    Microsoft.VisualStudio.Shell.Design.dll!Microsoft.VisualStudio.Shell.Design.DesignerWindowPane.OnFlush() + 0x33 bytes
    Microsoft.VisualStudio.Shell.Design.dll!Microsoft.VisualStudio.Shell.Design.DesignerWindowPane.Microsoft.VisualStudio.Shell.Interop.IVsBatchUpdate.FlushPendingUpdates(uint reserved) + 0x2a bytes
    Microsoft.VisualStudio.Editor.Implementation.dll!Microsoft.VisualStudio.Editor.Implementation.VsTextBufferAdapter.Microsoft.VisualStudio.Shell.Interop.IVsBatchUpdate.FlushPendingUpdates(uint dwReserved) + 0x97 bytes Microsoft.VisualStudio.Editor.Implementation.dll!Microsoft.VisualStudio.Editor.Implementation.VsTextBufferAdapter.Save(string pszFilename = "C:\Temp\Reveille_KofaxMFP - Version 2\Editors\Connectivity.Designer.cs", int fRemember = 1, uint nFormatIndex = 0) + 0x2f bytes
    [Native to Managed Transition]
    msenv.dll!DllUnregisterServer() + 0x10c990 bytes
    [Frames below may be incorrect and/or missing, no symbols loaded for msenv.dll] msenv.dll!DllUnregisterServer() + 0x10cce8 bytes
    msenv.dll!DllUnregisterServer() + 0x3e1d6 bytes
    [Managed to Native Transition]
    Microsoft.VisualStudio.Editor.Implementation.dll!Microsoft.VisualStudio.Editor.Implementation.VsDocDataAdapter.SaveDocData(Microsoft.VisualStudio.Shell.Interop.VSSAVEFLAGS dwSave, out string pbstrMkDocumentNew, out int pfSaveCanceled) + 0x7e bytes [Native to Managed Transition]
    csproj.dll!DllGetClassObject() + 0x14e87 bytes msenv.dll!DllUnregisterServer() + 0x12cbc9 bytes
    msenv.dll!DllUnregisterServer() + 0x12c940 bytes
    msenv.dll!VStudioTerm() + 0x4ab22 bytes
    msenv.dll!VStudioMain() + 0x1bb97 bytes
    msenv.dll!VStudioMain() + 0x1b74c bytes
    msenv.dll!VStudioTerm() + 0x3ba6d bytes
    msenv.dll!VStudioMain() + 0x1b8e1 bytes
    [Managed to Native Transition]
    Microsoft.VisualStudio.Shell.Design.dll!Microsoft.VisualStudio.Shell.Design.Serialization.DesignerDocDataService.LockedDocData.Save() + 0xbc bytes
    Microsoft.VisualStudio.Shell.Design.dll!Microsoft.VisualStudio.Shell.Design.Serialization.DesignerDocDataService.Microsoft.VisualStudio.Shell.Interop.IVsRunningDocTableEvents.OnAfterSave(uint docCookie) + 0x124 bytes
    [Native to Managed Transition]
    msenv.dll!DllUnregisterServer() + 0xd6984 bytes
    msenv.dll!DllUnregisterServer() + 0xd68f0 bytes
    msenv.dll!DllUnregisterServer() + 0x12cc40 bytes
    msenv.dll!DllUnregisterServer() + 0x12c940 bytes
    msenv.dll!VStudioTerm() + 0x4ab22 bytes
    msenv.dll!VStudioMain() + 0x1bb97 bytes
    msenv.dll!VStudioMain() + 0x1b74c bytes
    msenv.dll!VStudioTerm() + 0x3ba6d bytes
    msenv.dll!VStudioMain() + 0x1b8e1 bytes
    msenv.dll!DllUnregisterServer() + 0x34e5c bytes
    msenv.dll!DllMain() + 0x5c5 bytes
    msenv.dll!DllMain() + 0x2609d bytes
    msenv.dll!DllMain() + 0x265a7 bytes
    msenv.dll!DllUnregisterServer() + 0x170768 bytes
    msenv.dll!DllUnregisterServer() + 0x1e56f8 bytes
    msenv.dll!DllMain() + 0x1ea7f bytes
    msenv.dll!DllMain() + 0x1e70b bytes
    msenv.dll!DllUnregisterServer() + 0x170894 bytes
    msenv.dll!DllUnregisterServer() + 0x378a71 bytes
    msenv.dll!DllUnregisterServer() + 0x378bb8 bytes
    msenv.dll!DllUnregisterServer() + 0x378aa1 bytes
    msenv.dll!6861124f()
    [Managed to Native Transition]
    Microsoft.VisualStudio.Shell.10.0.dll!Microsoft.Internal.VisualStudio.PlatformUI.DataSource.Invoke(string verb, object pvaIn, out object pvaOut) + 0x21 bytes
    Microsoft.VisualStudio.Shell.UI.Internal.dll!Microsoft.VisualStudio.PlatformUI.VsCommand.Execute(object parameter) + 0x29 bytes PresentationFramework.dll!MS.Internal.Commands.CommandHelpers.CriticalExecuteCommandSource(System.Windows.Input.ICommandSource commandSource, bool userInitiated) + 0xb4 bytes
    PresentationFramework.dll!System.Windows.Controls.Primitives.ButtonBase.OnClick() + 0x54 bytes
    PresentationFramework.dll!System.Windows.Controls.Button.OnClick() + 0x4d bytes PresentationFramework.dll!System.Windows.Controls.Primitives.ButtonBase.OnMouseLeftButtonUp(System.Windows.Input.MouseButtonEventArgs e) + 0x9e bytes
    PresentationCore.dll!System.Windows.UIElement.OnMouseLeftButtonUpThunk(object sender, System.Windows.Input.MouseButtonEventArgs e) + 0x6c bytes PresentationCore.dll!System.Windows.Input.MouseButtonEventArgs.InvokeEventHandler(System.Delegate genericHandler, object genericTarget) + 0x31 bytes
    PresentationCore.dll!System.Windows.RoutedEventArgs.InvokeHandler(System.Delegate handler, object target) + 0x29 bytes
    PresentationCore.dll!System.Windows.RoutedEventHandlerInfo.InvokeHandler(object target, System.Windows.RoutedEventArgs routedEventArgs) + 0x3e bytes
    PresentationCore.dll!System.Windows.EventRoute.InvokeHandlersImpl(object source = {Microsoft.VisualStudio.PlatformUI.VsButton}, System.Windows.RoutedEventArgs args = {System.Windows.Input.MouseButtonEventArgs}, bool reRaised = true) + 0xbe bytes
    PresentationCore.dll!System.Windows.UIElement.ReRaiseEventAs(System.Windows.DependencyObject sender = {Microsoft.VisualStudio.PlatformUI.VsButton}, System.Windows.RoutedEventArgs args = {System.Windows.Input.MouseButtonEventArgs}, System.Windows.RoutedEvent newEvent) + 0x114 bytes
    PresentationCore.dll!System.Windows.UIElement.OnMouseUpThunk(object sender, System.Windows.Input.MouseButtonEventArgs e) + 0xc5 bytes
    PresentationCore.dll!System.Windows.Input.MouseButtonEventArgs.InvokeEventHandler(System.Delegate genericHandler, object genericTarget) + 0x31 bytes
    PresentationCore.dll!System.Windows.RoutedEventArgs.InvokeHandler(System.Delegate handler, object target) + 0x29 bytes
    PresentationCore.dll!System.Windows.RoutedEventHandlerInfo.InvokeHandler(object target, System.Windows.RoutedEventArgs routedEventArgs) + 0x3e bytes
    PresentationCore.dll!System.Windows.EventRoute.InvokeHandlersImpl(object source = {Microsoft.VisualStudio.PlatformUI.VsButton}, System.Windows.RoutedEventArgs args = {System.Windows.Input.MouseButtonEventArgs}, bool reRaised = false) + 0xbe bytes
    PresentationCore.dll!System.Windows.UIElement.RaiseEventImpl(System.Windows.DependencyObject sender = {Microsoft.VisualStudio.PlatformUI.VsButton}, System.Windows.RoutedEventArgs args = {System.Windows.Input.MouseButtonEventArgs}) + 0x79 bytes PresentationCore.dll!System.Windows.UIElement.RaiseTrustedEvent(System.Windows.RoutedEventArgs args = {System.Windows.Input.MouseButtonEventArgs}) + 0x41 bytes PresentationCore.dll!System.Windows.UIElement.RaiseEvent(System.Windows.RoutedEventArgs args, bool trusted) + 0x2c bytes
    PresentationCore.dll!System.Windows.Input.InputManager.ProcessStagingArea() + 0x1ff bytes
    PresentationCore.dll!System.Windows.Input.InputManager.ProcessInput(System.Windows.Input.InputEventArgs input) + 0x45 bytes PresentationCore.dll!System.Windows.Input.InputProviderSite.ReportInput(System.Windows.Input.InputReport inputReport) + 0x62 bytes
    PresentationCore.dll!System.Windows.Interop.HwndMouseInputProvider.ReportInput(System.IntPtr hwnd, System.Windows.Input.InputMode mode, int timestamp, System.Windows.Input.RawMouseActions actions, int x, int y, int wheel) + 0x2c2 bytes PresentationCore.dll!System.Windows.Interop.HwndMouseInputProvider.FilterMessage(System.IntPtr hwnd = 1837128, MS.Internal.Interop.WindowMessage msg = WM_LBUTTONUP, System.IntPtr wParam = 0, System.IntPtr lParam = 2293872, ref bool handled = false) + 0x67d bytes
    PresentationCore.dll!System.Windows.Interop.HwndSource.InputFilterMessage(System.IntPtr hwnd = 1837128, int msg = 514, System.IntPtr wParam = 0, System.IntPtr lParam = 2293872, ref bool handled = false) + 0x75 bytes WindowsBase.dll!MS.Win32.HwndWrapper.WndProc(System.IntPtr hwnd = 1837128, int msg = 514, System.IntPtr wParam = 0, System.IntPtr lParam = 2293872, ref bool handled = false) + 0xbe bytes
    WindowsBase.dll!MS.Win32.HwndSubclass.DispatcherCallbackOperation(object o) + 0x7d bytes
    WindowsBase.dll!System.Windows.Threading.ExceptionWrapper.InternalRealCall(System.Delegate callback, object args, int numArgs) + 0x53 bytes WindowsBase.dll!MS.Internal.Threading.ExceptionFilterHelper.TryCatchWhen(object source = {System.Windows.Threading.Dispatcher}, System.Delegate method, object args, int numArgs, System.Delegate catchHandler = null) + 0x42 bytes WindowsBase.dll!System.Windows.Threading.Dispatcher.InvokeImpl(System.Windows.Threading.DispatcherPriority priority, System.TimeSpan timeout, System.Delegate method, object args, int numArgs) + 0xb4 bytes
    WindowsBase.dll!MS.Win32.HwndSubclass.SubclassWndProc(System.IntPtr hwnd = 1837128, int msg = 514, System.IntPtr wParam = 0, System.IntPtr lParam = 2293872) + 0x104 bytes
    user32.dll!gapfnScSendMessage() + 0x1cf bytes
    user32.dll!gapfnScSendMessage() + 0x2cf bytes
    user32.dll!gapfnScSendMessage() + 0x901 bytes
    user32.dll!DispatchMessageW() + 0xf bytes
    msenv.dll!DllGetClassObject() + 0x37521 bytes
    msenv.dll!DllGetClassObject() + 0x375aa bytes
    msenv.dll!DllCanUnloadNow() + 0x190f bytes msenv.dll!DllCanUnloadNow() + 0x1840 bytes msenv.dll!DllCanUnloadNow() + 0x17a1 bytes msenv.dll!DllCanUnloadNow() + 0x176e bytes msenv.dll!DllCanUnloadNow() + 0x16b0 bytes msenv.dll!VStudioMain() + 0x78 bytes
    devenv.exe!2fcb0637()
    devenv.exe!2fcb0fd4()
    devenv.exe!2fcb20d8()
    devenv.exe!2fcb2148()
    devenv.exe!2fcbea7f()
    kernel32.dll!BaseThreadInitThunk() + 0x12 bytes
    ntdll.dll!RtlInitializeExceptionChain() + 0xef bytes
    ntdll.dll!RtlInitializeExceptionChain() + 0xc2 bytes



    [更新2]

    我想我已经找到了问题的原因。

    根据 SLaks 的建议,我重新检查了 X.Designer.cs 与我的 UserControl 关联的文件。在 X.Designer.cs 中声明了其他几个控件(复选框、标签等),但实际上并没有出现在 UI 中。我怀疑在我使用 WinForm 编辑器开发我的 UserControl 时,我可能经历了几个添加/删除子控件的循环,并且在某些时候这些子控件中的一些在 X.Designer.cs 文件中被孤立了。我回到了我的 UserControl 的非本地化版本( Localizable = False ),然后删除了所有孤立的子控件,然后重新编译,然后在 WinForm 设计器中打开 UserControl,然后将 Localizable 设置回 True ,并保存了一切。这似乎现在起作用了。如果这最终不是解决方案,我会在将来更新它。

    最佳答案

    您在引用应用程序其余部分的控件中的事件处理程序中有代码。
    在设计器中使用控件时,此代码失败(因为您的其余代码未运行),并引发异常。

    您需要查看 if (DesignMode) ,并且不在设计器中运行任何此类逻辑。

    为了帮助查找问题,您可以启动 Visual Studio 的第二个副本,将其调试器附加到第一个副本,然后设置 打破所有异常 .

    关于winforms - 为什么 WinForm 设计器显示消息 "Value cannot be null. Parameter name: context"?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8263018/

    27 4 0