问题标签 [toolstrippanel]

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 投票
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 投票
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 投票
2 回答
1057 浏览

c# - C# ToolStripPanel 绘图问题

我试图让 ToolStripPanel 具有与嵌入式 ToolStrips 相同的绘图样式,以便它看起来像一个连续的条形图。我有使用 ToolStripProfessionalRenderer 的 ToolStrip,因此它们的样式与 Windows 任务栏相同。

通过创建从 ToolStripProfessionalRenderer 派生的新渲染器,我已经接近了:

这会创建具有正确颜色的渐变外观,但它们并不完全匹配。似乎渐变的颜色数量更多,因此展开的时间更长。

我已经考虑了 ToolStrips 的边界(此代码中未显示),但它们仍然不完全匹配。

有谁知道如何做到这一点?

0 投票
1 回答
1717 浏览

vb.net - 锁定 ToolStripContainer 面板以仅允许一行工具条

我希望 ToolStrips 保留在一行上,并且用户能够在该行上重新排列但不能创建其他行。我尝试在 LocationChanged 事件上使用 SetBounds,如果用户试图更改 Y 位置,它会立即弹回。但是,这会产生一些视觉错误,例如鼠标总是跳回该位置并且 ToolStrips 随机跳动(拖动一个时,另一个会在栏上随机跳动......)

我还尝试设置工具条容器面板的最大大小,但它允许创建一个新行(工具条被隐藏在其中。)

编辑:已经几个月了,仍然没有答案......这甚至可能吗?

0 投票
2 回答
2643 浏览

.net - 从 ToolStripPanel 中分离 ToolStrip

开箱即用,似乎没有任何内置支持允许您的最终用户将ToolStrip应用程序中的 s 从其父ToolStripPanels 中分离出来。ToolStrip显然这是可能的,因为即使您的 Visual Studio IDE 也允许您取消停靠/撕下/浮动您的工具条,而使用and的默认行为是不可能的ToolStripPanel

那么,有人给点建议吗?我想让我们的最终用户能够撕下ToolStrips,并让它们在任何他们想要的地方自由浮动。

0 投票
2 回答
916 浏览

c# - 我是否需要在 ToolStripPanel、ToolStrip 和 ToolStripItems 上调用 dispose?

ToolStripPanel我在代码中构建了一个我添加 aToolStrip并随后添加几个ToolStripButtons 和ToolStripSeparators 的代码。我是否需要手动完成并删除和/或调用 dispose ?也就是说,循环遍历按钮和分隔符并对它们调用 dispose,然后ToolStripToolStripPanel和 dispose 中ToolStrip删除,最后ToolStripPanel从它的父控件中删除并处理它?

更新

阅读Control.Dispose的文档,似乎调用Dispose父母会处置孩子。不清楚的是ToolStripItems 是否是适当的“孩子”,ToolStrip因为您没有将它们添加到ToolStrip.Controls集合中,而是将它们添加到ToolStrip.Items集合中。查看ToolStrip.Controls文档时,它说此属性与此类无关。

ToolStripPanel您不调用的情况相同ToolStripPanel.Controls.Add(toolstrip),而是ToolStripPanel.Join(toolstrip)

0 投票
1 回答
172 浏览

c# - ToolStrip 添加到 ToolStripPanel 时不会拖动

我正在关注下面 YouTube 上的视频

使用 ToolStripPanel 控件处理 Mdi 表单

它在 VB .NET 中,我尝试在 C# 中使用。这是我的代码:

没有错误。但是,如果我尝试拖动 ToolStrip(变量 a),它不会像视频中那样移动。帮助我出了什么问题以及如何解决。

0 投票
1 回答
968 浏览

c# - ToolStripPanel Join 方法未将工具条添加到面板

我对 ToolStripPanel.Join 有一个非常奇怪的问题,我一直在 Google 和 SO 上搜索一些关于我做错了什么的线索,但我无法弄清楚。基本上,当我使用 ToolStripPanel.Join 时,我添加的第一个 ToolStrip 根本不会出现在 ToolStripPanel 中,但我加入的所有其他 ToolStrip 都会出现。在我深入细节之前,让我先说我正在使用 C# 和 VS 2010 和 .NET 4,并且,就某些上下文而言,我正在尝试在位于内部的用户控件上使用 ToolStripPanel我们制作的自定义 dll,以便我们可以在其他形式中重用这些用户控件。

我之前使用的是 ToolStripContainer,但我决定改用 ToolStripPanel,因为我们只需要 ToolStripContainer 的顶部面板;我没有看到使用 ToolStripContainer 的意义。由于在 Toolbox 中找不到 ToolStripPanel 控件,我决定自己将其添加到 Designer.cs 文件中。我是这样做的:

然后,在用户控件的构造函数中,我有:

由于我们正在创建工具条并将它们添加到代码中的工具条面板中,因此我无法在用户控件的设计器中看到它的外观。因此,我构建了 dll,然后转到另一个项目中的另一个表单,该项目使用 dll 中的用户控件,当表单打开时,没有工具条;它根本没有出现。不过,这是奇怪的事情。如果我在面板中再添加一个工具条,则会出现第二个工具条:

在上面的代码中,我创建的第一个工具条不会出现,但会出现第二个(openSaveToolStrip2)。顺便说一句,如果我只对两个工具条使用 Join 重载 Join(toolStrip),则什么都不会出现。此外,如果我将工具条添加到其他行,即 tsPanel.Join(toolstrip3, 2) 或 tsPanel.Join(toolstrip4, 3),则会出现工具条。

似乎,出于某种莫名其妙(至少对我而言)的原因,我添加的第一个工具条从未出现,但所有后续工具条都会出现。作为一种解决方法,我一直在创建一个虚拟工具条,添加它,然后添加我所有的真实工具条。这感觉很hacky,所以我很想弄清楚为什么会这样。我试图按照MSDN 上的文档进行操作,但我仍然必须遗漏一些东西,因为我无法想象像这样的错误没有得到修复。

有人知道这里可能出了什么问题吗?

0 投票
0 回答
118 浏览

vb.net - VB.net:删除 ToolStripPanel/ToolStripContentPanel

在 Visual Studio 2013 社区中处理项目 VB.net 项目时,我不小心插入了 ToolStripPanel/ToolStripContentPanel 控件组合。

然而不幸的是,我现在无法删除它。任何人都可以建议如何去做吗?肯定有办法的。不幸的是,我不能只点击撤消,因为该项目已被保存。