问题标签 [toolstripitem]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
winforms - 使用 Graphics.TextRenderingHint 和 TextRenderer.DrawText 在 ToolStripItem 中获取抗锯齿文本
我需要增强一个旧版 WinForms 应用程序以支持应用程序表单中 TextRenderingHint 设置的继承。
为简单起见,假设我们有一个带有System.Drawing.Text.TextRenderingHint类型的 TextRenderingHint 属性的主窗体。此属性指定主窗体中的文本质量,并且必须在从此主窗体调用的对话框窗体中继承。主窗体中的文本是使用Graphics.DrawString方法绘制的,支持主窗体的TextRenderingHint属性的各种设置是没有问题的(其实就是在用Graphics.DrawString绘制文本之前简单的赋值给Graphics.TextRenderingHint)。
问题是其中一个对话框的界面基于 WinForms ToolStrip 组件,我需要在其项目中重新定义文本绘制以支持主窗体的 TextRenderingHint 设置。
在网上搜索并分析了反射器应用程序中ToolStripRenderer类的源代码后,我得出的结论是,实现我需要的最佳方法是使用自定义 ToolStrip 渲染器和重新定义的OnRenderItemText方法。
我在 ToolStripRenderer 类的 OnRenderItemText 方法的默认实现中找到了以下代码(请参阅我的问题底部的完整代码):
,这给了我一个想法,我可以尝试在从 ToolStripRenderer 派生的类中通过 OnRenderItemText 的这个简单实现来解决我的问题:
我的想法是基于这样一个事实,即如果我们不在 ToolStrip 项目中使用垂直文本(我们没有),基本的 OnRenderItemText 方法“只是”调用TextRenderer.DrawText并且理论上我的想法可以工作。不幸的是,实际上这仅适用于 TextRenderingHint.ClearTypeGridFit 选项 - 至少在我的开发电脑上。
我现在看到的唯一可行的想法是完全重写 OnRenderItemText 并在里面使用 Graphics.DrawString。我对吗?我的问题还有其他解决方案吗?
更新 #1。我在尝试基于 Graphics.DrawString 重新实现 OnRenderItemText 时遇到了问题。看来,不可能将传递给 TextRenderer.DrawText(TextFormatFlags枚举)的文本格式标志转换为StringFormatClass参数 Graphics.DrawString 期望的......
更新#2。ToolStripRenderer 类中 OnRenderItemText 方法的默认实现如下:
vb.net - 使用名称访问和禁用 ToolStripItems(ToolStripButtons、ToolStripMenuItems)
我想禁用名称存储在数据库中的 UI 元素(控件、组件等)。
我的代码适用于控件,但我想访问(禁用它们)ToolStripItems,例如 ToolStripButtons、ToolStripMenuItems 等。
这是我当前的代码:
vb.net - 如何使用递归提取 ContextMenuStrip 的所有 ToolStripMenuItems?
我正在尝试将所有项目从 ContextMenuStrip 提取到List(Of ToolStripMenuItem)
.
我可以获得 DataGridView 的 ContextMenuStrip 的引用,然后 - 使用递归函数 - 我想提取所有 的Name
和Text
属性,如果有的话ToolStripMenuItems
,不包括。ToolStripSeparators
我使用这段代码:
递归的功能是FindControlRecursive_ContextMenu()
:
它可以工作,但是如果在 DropDown 列表中有一个ToolStripSeparator
,我没有该DropDown.Items
元素并且该函数会生成异常。
如何跳过 ToolStripSeparators 并使用下一个“孩子”调用递归函数?
c# - ToolStripLabel 未使用 PropertyBinding 更新应用程序设置
我可能有一个非常简单的问题,但找不到解决方案。我对 ToolStripLabel 的属性绑定有疑问。标签绑定到 App.Config 中的 COM 端口值。
如果我为System.Windows.Forms.Label
标签绑定属性,则通过更改 COM 端口来更新 Text-Property 可以正常工作。但是,当标签为 IN ToolStrip ( System.Windows.Forms.ToolStripLabel
) 时,不会通过在运行时更改 COM 端口的值来更新标签。
只有重新启动应用程序才会更改它。
图中有PropertyBinding
to的当前设置ApplicationSettings
。
我已经尝试过:
- 应用程序.DoEvents()
- 工具条更新()
- toolStrip.Refresh()
- toolStrip.Invalidate()
没有什么不同。有谁知道问题可能是什么?
问候,萨沙
c# - 如何使 .NET 4.6.2 MenuStrip 在应用程序工作区上方可见(在 C# 中编程时)
我继承了一些用 Visual Studio 2010 编写的针对 .NET 2.0 框架的 C# 源代码。它包含一个简单的 Windows 窗体应用程序,其用户界面为单个窗体。
该表单包含许多菜单项,其中一个允许用户预览图像(从相机获取)。程序输出的示例如下所示,黑色矩形是图像。
我希望使用 Visual Studio 2019 从头开始为 .NET 4.6.2 框架重写应用程序。
重新创建表单很简单。但是,MenuItem
VS2010 中用于 .NET 2.0 的组件已被MenuStrip
VS2019替换ToolStripMenuItem
。当我构建应用程序的更新版本时,我无法使菜单条以相同的方式运行。当应用程序运行时,我的输出如下所示。
如您所见,顶级菜单可访问但不可见。如何找到下面的工作区图像MenuStrip
?
我希望答案是MenuStrip
我忽略的 Visual Studio 的“属性”对话框中的一些设置。
以下是属性当前在 中的显示方式Form1.Designer.cs
: