- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我创建了一个干净的 WindowsFormsApplication 解决方案,向主窗体添加了一个 ToolStrip
,并在其上放置了一个按钮。我还添加了一个 OpenFileDialog
,因此 ToolStripButton
的 Click
事件如下所示:
private void toolStripButton1_Click(object sender, EventArgs e)
{
openFileDialog1.ShowDialog();
}
我没有更改任何其他属性或事件。
有趣的是,当我双击 ToolStripButton
(第二次单击必须非常快,在对话框打开之前),然后取消两个对话框(或选择一个文件,它不会这真的很重要)然后单击主窗体的客户区,NullReferenceException
使应用程序崩溃(错误详细信息附在帖子末尾)。 请注意,Click
事件已实现,而 DoubleClick
未实现。
更奇怪的是,当 OpenFileDialog
被任何用户实现的表单替换时,ToolStripButton
阻止被点击两次。
我在 Windows 7 Professional(来自 MSDNAA)上使用带有 .NET3.5 的 VS2008 和最新更新。我没有更改 VS 中的许多选项(只有字体大小、工作区文件夹和行编号)。
有人知道怎么解决吗?它在我的机器上是 100% 可复制的,在其他机器上也是吗?
我能想到的一个解决方案是在调用 OpenFileDialog.ShowDialog()
之前禁用该按钮,然后再启用该按钮(但这并不好)。还有其他想法吗?
现在是 promise 的错误详细信息:
System.NullReferenceException was unhandled
Message="Object reference not set to an instance of an object."
Source="System.Windows.Forms"
StackTrace:
at System.Windows.Forms.NativeWindow.WindowClass.Callback(IntPtr hWnd, Int32 msg, IntPtr wparam, IntPtr lparam)
at System.Windows.Forms.UnsafeNativeMethods.PeekMessage(MSG& msg, HandleRef hwnd, Int32 msgMin, Int32 msgMax, Int32 remove)
at System.Windows.Forms.Application.ComponentManager.System.Windows.Forms.UnsafeNativeMethods.IMsoComponentManager.FPushMessageLoop(Int32 dwComponentID, Int32 reason, Int32 pvLoopData)
at System.Windows.Forms.Application.ThreadContext.RunMessageLoopInner(Int32 reason, ApplicationContext context)
at System.Windows.Forms.Application.ThreadContext.RunMessageLoop(Int32 reason, ApplicationContext context)
at System.Windows.Forms.Application.Run(Form mainForm)
at WindowsFormsApplication1.Program.Main() w C:\Users\Marchewek\Desktop\Workspaces\VisualStudio\WindowsFormsApplication1\Program.cs:line 20
at System.AppDomain._nExecuteAssembly(Assembly assembly, String[] args)
at System.AppDomain.ExecuteAssembly(String assemblyFile, Evidence assemblySecurity, String[] args)
at Microsoft.VisualStudio.HostingProcess.HostProc.RunUsersAssembly()
at System.Threading.ThreadHelper.ThreadStart_Context(Object state)
at System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state)
at System.Threading.ThreadHelper.ThreadStart()
InnerException:
最佳答案
我能够在 Windows 7 机器上复制这样的东西——我没有遇到异常,但我的表单将不再重绘。可能是因为我没有在 win 7 机器上的调试器中运行,所以异常被吞掉了。
这不会发生在我的 XP 机器上。这只发生在我使用 toolStripButton 并在我第一次打开对话框时双击它。如果我正常打开对话框然后先关闭它,则双击不会打开对话框两次。
我怀疑这里发生的事情与竞争条件相似 - 框架开发人员从没想过他们的代码会被输入两次,但这种情况发生了,因为一个新的回调进入消息循环。那么为什么会发生这种情况 - 对我来说看起来像是一个错误。
我找到了一个非常简单的解决方法来阻止它发生——启用 toolStripButton 的 DoubleClickEnabled 属性。您不必实现双击处理程序 - 它会将双击视为单击,然后一切正常。
我会这样处理:
public Form1()
{
InitializeComponent();
// This is a workaround for a framework bug
// see blah blah
toolStripButton1.DoubleClickEnabled = true;
}
下次升级框架时,您可以尝试将其删除。
尼尔
关于c# - 为什么在单击 ToolStrip 按钮两次时抛出 NullReferenceException - openFileDialog.showDialog()?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4576775/
我有一个带有两个工具条的工具条容器。我想强制其中一个显示在另一个之上。我尝试将一个 Dock 设置为顶部,另一个设置为底部,但它们仍然随机显示。我也尝试使用 TopToolStripPanel.Con
我正在将 .net 2.0 与 Visual Studio 2005 一起使用,并且我正在尝试将两个不同的工具条添加到表单顶部,以便它们并排显示。我希望它像 Word 2003 一样,您可以在其中将多
我有一个 .NET 2.0 WinForms 应用程序,主窗体上有一个 ToolStrip。有时,ToolStrip 图标不会响应第一次鼠标单击,因此我必须单击该图标两次。它只是一个带有几个图标和工具
我想在我的 C# winform 中添加一些复选框以及标准工具条控件。工具条提供的标准控件没有问题,但我的复选框有问题。在toolstrip中,第一个控件是combobox(toolstrip com
我找到了这篇文章 VS-2010_Location在 stackoverflow 上,关于创建工具条时使用的标准图标的位置,并在工具条中“插入标准项目”,如新建、打印、剪切、粘贴等。 但是对于 VS
我的这行代码似乎无法正确打印: toolStripStatusLabel1.Text = String.Format("完成({0} 个结果)", _count); 打印出来的是这样的: 如果没有应用
我重写了位于用户屏幕顶部的工具栏。它有效,但出于某种原因,尽管该应用程序仅包含一个带有 Fill-Docked ToolStrip 的表单,但我无法让它保持在我指定的大小。它应该是 Windows 标
我在 C# 应用程序中有一个 ToolStrip,我将背景颜色设置为透明。这揭示了基础窗体的颜色,但不幸的是 ToolStrip 边框仍然可见。 我已经实现了一个自定义渲染器并重写了 DrawBoar
我正在开发一个 Windows 窗体应用程序(C#、.NET 4.0、VS 2010),其中我有一个非常标准的 MainForm 和一个 ToolStrip(GripStyle:Hidden,Dock
在运行时,我根据需要向主窗口添加(和删除)多个控件,该主窗口在设计器中仅包含带有一些功能按钮的 ToolStrip。在某些情况下,我想在 toolStrip 旁边添加信息标签,但我无法使其可见,即。它
假设我有 FormChild 继承 FormParent。在父级中,顶部有一个工具提示。我想要的是在我的子窗体中添加额外的元素,但控件始终处于锁定状态,尽管我已将 modifiers 设置为 prot
很难说出这里要问什么。这个问题模棱两可、含糊不清、不完整、过于宽泛或夸夸其谈,无法以目前的形式得到合理的回答。如需帮助澄清此问题以便重新打开,visit the help center . 关闭 9
我正在为一个程序构建一个 UI,但我不明白为什么我的进度条在点击转换按钮后不可见。 private void convertButton_Click(object sender, EventArgs
我正在为特定作业(例如 Font ToolStrip)设计一系列 ToolStrip 控件。我需要做的是阻止用户和开发人员在我的 ToolStrip 中添加或删除控件。 任何帮助将不胜感激丹尼 最佳答
在我的 Winforms 应用程序中,我有一个工具条,我将其 BackColor 属性设置为黑色。一切都很好,除了工具栏上的每个下拉按钮都将其下拉箭头绘制为黑色,从而使其不可见。我的问题是,如何更改此
如何在 C# 中以编程方式对 ToolStrip 上的项目重新排序。 谢谢。 最佳答案 我找到了解决这个问题的方法,方法是使用 Items 集合的 Insert() 方法并指定我想要项目所在的索引。
你好,我有一个带有“收藏夹”菜单的 ToolStripMenu,我想在运行时在我的 WinForms 应用程序中添加子项。我有一个 datagridview,我右键单击它以显示具有“添加到收藏夹”选项
这个问题在这里已经有了答案: ToolStrip sometimes not responding to a mouse click (5 个答案) MenuStrip can't get focu
在哪里可以找到 Microsoft ToolStrip 图标的图像,例如:新建、打开、保存、全部保存、打印、下一步、上一步、播放、撤消等? 最佳答案 如果由于某种原因您找不到图像存档,您可以从这里
我有一个使用表单设计器创建的菜单条。然后我想以编程方式在菜单条下添加一个工具条工具栏。原因是这个工具栏是我作为插件添加到主应用程序的一组工具。因此,当加载插件时,我创建了工具栏。 当我使用窗体设计器手
我是一名优秀的程序员,十分优秀!