问题标签 [toolstrip]

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.

0 投票
4 回答
8534 浏览

c# - 在非焦点 ToolStripItem 上显示工具提示

当您将鼠标悬停在 ToolStripItems 上时,它们会显示活动突出显示,即使它们所在的表单不在焦点上也是如此。但是,除非表单获得焦点,否则它们不会显示工具提示。我见过ToolStrip 'click-though' hack。任何人都知道如何让 ToolStripButton 在其父窗体不在焦点时显示其工具提示?

谢谢!

0 投票
3 回答
334 浏览

winforms - 您会选择在您的应用程序中使用哪种导航控件?

带有 MenuStrip 或 RibbonBar 的 ToolStrip?


它结合了这两个控件。它还有一个 TabPages 导航、上下文选项卡等。但是 RibbonBar 是一个非常复杂的控件,当您在例如 Word2007 中打开一个新文档时,您会看到一个 Ribbon Bar。这并不酷。当您拥有 toolStrips 时,您可以将它们布局到上、下、左、右,并更好地控制 UI 外观。我们还可以隐藏我们不想看到的工具条,它们不再占用任何屏幕空间。

0 投票
1 回答
3246 浏览

c# - System.Windows.Forms.ToolStrip 高度或自动调整大小

我在 Excel 2007 操作窗格中使用了一系列工具条。我以编程方式将按钮添加到每个 ToolStrip,然后将每个 ToolStrip 添加到操作窗格。到现在为止还挺好; 我的 ToolStrips 及其关联的 ToolStripButtons 出现。

问题在于显示 ToolStrip 的全部内容。我将 ToolStrip.AutoSize 设置为 true (实际上是默认设置)。该属性的描述如下:

"获取或设置一个值,该值指示控件是否自动调整大小以显示其全部内容。"

问题是,即使它设置为 true,我的 ToolStrips 也会显示操作窗格的宽度,但只有一行高;对于那些包含更多按钮的 ToolStrip,然后可以在该空间中显示 ToolStrip 不会垂直扩展以显示整组按钮,而是在右侧显示下拉箭头,允许用户查看剩余的纽扣。

那么,我的问题是我是否误解了这个属性(或者实际上是这个组件)的用法?例如,AutoSize 是否仅与水平空间有关?不管它值多少钱,我也尝试设置高度值无济于事。

0 投票
2 回答
5471 浏览

c# - 如何防止 ToolStrip 停靠在另一个 ToolStripContainer 中?

我有一个 MDI 应用程序,它允许我打开不同类型的子窗口。我可以打开相同类型的子窗口的多个(但不同的)实例。(示例:我可以打开 3 个子窗口类型 A 的实例和 2 个子窗口类型 B 的实例。所有 5 个窗口都是不同的实体,除非用户明确将相同的数据拖到多个窗口上,否则它们不会共享数据。)每个子窗口有一个带有一个或多个 ToolStrips 的 ToolStripContainer。我该如何预防:

  1. 用户从 A 类型的子窗口中将 ToolStrip 拖到 B 类型的子窗口中的 ToolStripContainer 中?
  2. 用户是否将 ToolStrip 从子窗口 A 的一个实例拖到同一类型窗口的另一个实例中的 ToolStripContainer?

我试图阻止用户将 ToolStrip 从 A 类型的实例 1 拖动到 A 类型的实例 2,在实例 2 上选择一些东西,然后单击工具栏上的一个按钮,只是为了让其他一些窗口发生奇怪的事情. 同样,将 ToolStrip 从 A 类型的窗口拖动到 B 类型的窗口是没有意义的——这些操作不适用于该类型,但对用户来说,一切都很好,因为我让他们这样做阻力。

是像为 ControlAdded 事件添加我自己的处理程序一样简单,还是有更好的方法来做到这一点?我在 .NET 3.0 中使用 WinForms。

编辑:重现的步骤

  1. 创建一个新的 Windows 应用程序项目。
  2. 添加一个新的用户控件。为控件提供一个 ToolStripContainer,其中包含一个带有单个按钮的 ToolStrip。
  3. 重复第 2 步,为您提供一个 UserControl2 类。
  4. 编译解决方案,以便 UserControl1 和 UserControl2 显示在您的工具箱中。
  5. 将 UserControl1 和 UserControl2 拖到窗体上。设置边界,以便您知道边界在哪里。
  6. 运行应用程序。
  7. 现在可以将 ToolStrip 从 UserControl1 中的容器拖放到 UserControl2 中的容器中(在 UC1 中留下零个 ToolStrip,在 UC2 中留下两个 ToolStrip。)
  8. 现在假设您只能访问 UserControl1 中的代码。如何防止用户将 ToolStrip 拖出 ToolStripContainer 的实例?
0 投票
3 回答
7249 浏览

user-interface - 尝试将 ToolStrip 与现有 ToolStrip 并排添加到 ToolStripPanel

我将 .net 2.0 与 Visual Studio 2005 一起使用,我试图在表单顶部添加两个不同的工具条,以便它们并排显示。我希望它像 Word 2003 一样,您可以在其中将多个工具条添加到同一行并让它们彼此对齐显示,而不是为每个工具条指定一行。

所以我添加了一个 ToolStripPanel 并将其停靠在表单的顶部(我没有使用 ToolStripContainer,因为我不需要所有额外的面板;我只需要顶部的那个)。我添加了两个工具条并将它们的 Stretch 属性设置为 False。我可以让它们并排显示在设计器窗口中,但在运行时 ToolStripPanel 将工具条分开并为每个工具条提供自己的专用行。仿佛雪上加霜,当我停止调试并返回给设计师时,我发现设计师也在将工具条移动到他们自己的行!我在这里做错了吗?

我整天都在谷歌搜索,发现了一些关于 ToolStripPanelRow 对象的信息,但我没有看到一种简单的方法来向它添加工具条(即它没有 ToolStripPanelRow.Controls.Add 方法或类似的方法),所有它有一个 Controls() 属性,它返回一个控件对象数组,我没有太多运气尝试将项目添加到该数组中。我还找到了一些关于 ToolStripPanel.Join 方法的文档,听起来它应该可以完成这项工作,所以我尝试了所有 3 个重载,但它们并没有像宣传的那样工作。无论我做什么或尝试哪个选项,它总是将新工具条添加到面板顶部的单独行,并将其他所有内容向下推。

为了全面披露,我应该警告您,我已将 ToolStripPanel 和其中一个工具条添加到基类表单中,并且我正在尝试将另一个工具条添加到从基类表单继承的子类表单中。基类表单中的 ToolStripPanel 和 ToolStrip 都被声明为“受保护的朋友”,所以这应该可以工作。正如我所提到的,子类表单的设计器窗口将允许我这样做(至少有一段时间)。

如果有人可以帮助我完成这项工作,或者至少说明为什么不这样做,我将不胜感激。

0 投票
5 回答
5731 浏览

.net - ToolStrip 有时不响应鼠标单击

我的主窗体上有一个带有 ToolStrip 的 .NET 2.0 WinForms 应用程序。有时,ToolStrip 图标不会响应第一次鼠标单击,因此我必须单击该图标两次。它只是一个带有几个图标和工具提示文本的标准 ToolStrip,我没有做任何特别的事情。这很常见吗?

0 投票
2 回答
5591 浏览

c# - ToolStripMenuItem 中的鼠标按钮

我有一个包含一些项目的上下文菜单。其中一个项目有一个子菜单(或其他任何名称),其中包含一些项目(取决于它找到的文件)。

我想要做的是,当我左键单击其中一个子项时,我希望发生一件事,而当我右键单击时,我希望发生另一件事。

我的问题是,当我使用 filesToolStripMenuItem_DropDownItemClicked 时,我没有在参数中得到任何 MouseEventArgs,所以我无法找出是哪个鼠标按钮用于单击该项目。

我尝试自己将其添加到参数中,但随后出现了一些错误。

有谁知道我该如何解决这个问题?所以我可以找出是用什么鼠标按钮来单击子项(这是一个 ToolStripMenuItem)?

谢谢

编辑:这是我用来创建子项目的代码:

对于这些项目,我希望能够根据我使用的鼠标按钮做不同的事情

0 投票
2 回答
1494 浏览

.net - 带有弹出菜单的 ToolStripButton?

我正在为类似绘画的程序做 GUI,用户将能够从 ToolStrip 中选择绘图工具。其中一些工具有变化,我希望用户能够通过弹出菜单选择一个。

任何熟悉 Photoshop 工具栏界面的人都知道我在追求什么:用户可以单击按钮并开始使用所选工具,或者从单击时出现的弹出菜单中选择一种工具,然后从那时起该按钮将代表该工具。Also, the button will have the Checked property set to True when that tool-family is selected.

我认为这可以通过 SplitButton 或 DropDownButton 来完成,但它们没有 Checked 属性供用户查看当前选择的工具。因此,我使用了 ToolStripButton 和单击时显示的 ContextMenuStrip。

问题在于,由于我将光标位置显示在 ContextMenuStrip 上,因此取决于单击 ToolStripButton 的哪个部分,弹出菜单可能会部分覆盖它,并且看起来很粗糙。如何获取 ToolStripButton 的屏幕坐标?还是有更好的(并且仍然相对简单)的方法来做到这一点?

0 投票
2 回答
2025 浏览

.net - 为动态添加的 ToolStripItem 更改 ToolStripPanel 溢出行为

我有一个 Windows 窗体 ToolStripPanel,我会动态地向它添加新的 ToolStrips。每个 ToolStrip 都有我动态添加到其中的 ToolStripItems(主要是 ToolStripButtons)。

只要您可以看到每个 ToolStrip 中的所有 ToolStripItem,我希望所有 ToolStrip 都放在一行上。如果将新 ToolStripItem 添加到 ToolStrip 导致发生溢出,我希望行尾的 ToolStrip 跳到新行。我唯一希望看到溢出按钮的情况是 ToolStrip 有太多项目以致无法适应表单的宽度。

我希望这是默认行为,除非用户手动移动 ToolStrip。如果用户移动 ToolStrip,那么我希望发生现有的溢出(例如,带有下拉选项的溢出按钮)行为。如果用户自己定位工具栏,我假设用户会接受这种默认的 Winforms 溢出行为。

如果在用户重新定位事物后添加了新的动态工具栏,我希望将新工具栏添加到底行最后一个 ToolStrip 的右侧。在用户手动重新定位它之前,该工具栏应该具有更新的溢出行为(例如,如果无法容纳,则使用新行)。

我做了一些研究但没有取得很大成功:

我错过了一个简单的解决方案吗?

更新:仍在寻找一个好的解决方案。似乎 LayoutCompleted 路线是可能的。但它的问题是它被多次调用。有一次它说 ToolStripItem 位于溢出区域,然后立即位于 Main 区域,因此仅检查一次是否溢出似乎并不安全。

0 投票
1 回答
1550 浏览

c# - 如何使用现有的 ToolStripRenderer 绘制托管的 NumericUpDown?

我有一个控件,它在 a 中托管 aNumericUpDownToolStripControlHost公开了NumericUpDown的属性。从功能上讲,这很好,但是当它放在 a 上时,它在视觉上与其他sToolStrip不匹配。ToolStripItem

我想使用ToolStrip现有的 'sToolStripRenderer以类似于控件上的ToolStripComboBoxes 的方式绘制控件。我对创建自定义ToolStripRenderer来执行此操作不感兴趣,因为我希望使用该控件的其他人能够将它与他们选择的任何渲染器一起使用。

我已经尝试在托管控件类和托管控件类中覆盖OnPaintOnPaintBackground使用渲染器的绘图方法,但我所能实现的就是在边缘周围有一个未绘制的区域;旋转按钮仍然使用系统主题绘制。

如何NumericUpDown使用现有的绘制托管ToolStripRenderer