问题标签 [toolstripcontrolhost]

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 投票
1 回答
1333 浏览

c# - 如何在 ToolStrip 中保持对 ToolStripControlHost 所有者的关注

将 C# 与 .Net 2.0 一起使用(尽管问题出现在 4.0 中)

似乎存在涉及 Windows 窗体中 ToolStrip 控件和 ToolStripControlHosts 焦点的错误。

考虑这个例子:用户单击 ToolStripMenuItem“Test A”,然后将鼠标斜向移动到下拉 ToolStripMenuItem“5”上。对角拖动时鼠标经过“Test B”,但当鼠标进入下拉列表时,焦点会自动从“Test B”移回“Test A”。这可以正常工作。

示例 1:http: //i.stack.imgur.com/0X9mZ.png

现在考虑一个类似的例子,但下拉列表中有一个 ToolStripControlHost。鼠标沿对角线移动,经过获得焦点的“测试 B”。当鼠标进入 ToolStripControlHost 时,焦点不会返回到父“Test A”,因此下拉列表关闭并且 ToolStripControlHost 被隐藏。

示例 2:http: //i.stack.imgur.com/XJ75K.png

我的问题是,我该如何处理这种情况?有没有办法将焦点强制到 ToolStripMenuItem“测试 A”上?

我尝试将“Test A”的 DropDown 的 autoclose 属性设置为 false,然后手动处理 close 事件,但这会导致几个问题。单击 ToolStripControlHost 时,ToolStrip 会收到一个 OnClose 事件,其中 ToolStripDropDownCloseReason 被 AppClicked。此外,ToolStripControlHost 中的任何文本框都不会接收文本事件,因为 ToolStrip 似乎正在使用它们(退格键在下拉列表中将焦点向上移动,而不是删除文本等)。

谢谢你的帮助

西蒙

0 投票
0 回答
328 浏览

c# - ToolstripControlHost 导致工具条在程序执行暂停时不会消失

我正在尝试构建一个自定义 WinForms ToolStripDropDownMenu。我需要自定义菜单项,所以我使用 ToolStripControlHosts。问题是,当菜单打开并且我遇到断点时,菜单不会消失并保持在所有应用程序的顶部。

有没有人遇到过这个问题?这是 Visual Studio 错误吗?

简单的例子:


在此处输入图像描述

0 投票
1 回答
1408 浏览

c# - .NET ToolStrip 控件错误:直到 ToolStrip 被释放后才触发 leave 事件

要重现此错误,您需要创建自定义ToolStripItem,使用ToolStripControlHost. 就我而言,我进行了ToolStripDateTimePicker控制(如许多优秀教程中所见)。然而,该控件的行为与常规的DateTimePicker.

ESC常规的在其处于活动状态时按下时会产生默认的 Windows 铃声。托管控件以更明智的方式对按下做出ToolStrip反应。ESC控件变为非活动状态,没有蜂鸣声。

这是错误部分:当通过单击聚焦另一个控件时 - 常规DateTimePicker触发Leave事件。正如预期的那样。ToolStrip托管控件不会触发任何事件!

是的,我已经尝试过KeyDown事件 -ESC按下键时不会发送,而是按下任何其他键时发送。

我相信这是 .NET 本身的一个错误。

ToolStrip这样做的结果是包含控件的表单的焦点行为被破坏。ToolStrip进入托管控件后,表单无法再次聚焦。

但这是一种解决方法:您可以关注另一个表单(甚至可能是另一个控件),然后是目标表单 - 它对我有用。

但是我希望它自动完成 - 用户退出托管控件的那一刻。问题是我没有这方面的活动。有任何想法吗?

奇怪的Leave是,事件最终会在托管控件被释放时触发——这显然是一个错误,因为该事件在那里完全没用。

此处:说明问题的示例应用程序 我已将其替换为示例解决方法,以查看问题注释OnGotFocus()OnLostFocus()覆盖。

在我更改FlowLayoutPanel TabIndex为 0 之前它运行良好(并且无法重现错误),因此DateTimePicker在应用程序启动时它不活动。

0 投票
0 回答
582 浏览

c# - 无法访问从设计器中的 ToolStripControlHost 继承的自定义控件的属性和事件

我正在寻找一个自定义的 ContextMenu 项目,它仅由一个包含标签和组合框的 FlowLayoutPanel 组成。我希望能够在设计时在 Visual Studio 2013 的设计器中访问我的自定义控件的属性和事件。我希望能够在 MenuStrip、ToolStripMenuItem 或 ContextMenu 中使用我的自定义控件。我的实际问题是,如果我将控件直接插入到 MenuStrip 中,一切正常,但当控件位于 ToolStripMenuItem 或 ContextMenu 中时,我无法访问控件的属性窗口。属性窗口全是白色的,并且设计器中的控件出现故障。

所以这是我的代码(我还没有实现任何属性或任何事件,但无论如何我应该可以在属性窗口中访问继承的属性和事件。事实上,当我将控件插入到 MenuStrip 而不是在另一个二。)

我在这里看到过类似的帖子: .NET Custom Control (ToolStripControlHost) Wreaks Havoc on Designer

但唯一的解决方案是创建一个继承自 ToolStripControlHost 并提供不带参数的构造函数的类,这根本不能解决我的问题。我还尝试创建新的空项目,重新启动 VS 并将类放入表单项目或外部库中也不能解决它。我还要补充一点,Form.designer 文件中没有什么不寻常的地方。

0 投票
1 回答
2347 浏览

c# - 带有自定义 ToolStripControlHost 的 ToolStrip 使选项卡顺序焦点行为怪异

我遇到了一些奇怪的行为。让我尝试解释一下,我将代码精简到最低限度,但我仍然遇到问题。所以首先,我将 VS2013 与 .NET 4.0 一起使用,并且我在 Windows 8.1 上。

所以我有一个通过 a 使用的自定义UserControlTextBox如果ToolStripControlHost我专注于这个文本框并点击TAB它,它只会循环通过控件到这个文本框的 LEFT。如果我让它集中并点击SHIFT+ TAB,它会循环通过它右侧的按钮。

在此处输入图像描述

所以这是我的表格的一个例子。中间的文本框是一个自定义控件。我的代码(尽可能简化)如下所示:

只需创建一个新的 WinForms (.NET4) 项目并按照以下步骤操作即可复制问题:

  1. 添加新的类文件并粘贴上面的代码。
  2. 建造
  3. 将 ToolStrip 添加到表单
  4. 在 ToolStrip 上添加一个 Button、我的自定义控件和另一个 Button(通过设计器是我一直在做的)

一旦运行...

  1. 专注于自定义控件
  2. 点击TAB几次,它应该只关注左边的控件。
  3. 点击SHIFT+TAB几次,它只会向右聚焦。

有谁知道问题是什么 - 或者我该如何解决这个问题?我整天都在扯头发试图解决这个问题。我终于剥离了我的代码,但我似乎无法让它工作。我什至尝试覆盖大部分OnEnter/OnGotFocus功能并自己做,但这变成了一场噩梦。

谢谢!

更新1:所以一些额外的花絮。

如果我将自定义控件更改为从 TextBox 而不是 UserControl 继承,则选项卡/焦点按预期工作。

如果我将其更改为 aControl而不是 aUserControl选项卡也可以正常工作,但是焦点永远不会进入我的内部 TextBox - 焦点似乎丢失了(或者可能在外部父控件上但没有传递到内部文本框)。

我确实看到添加的 MS Connect 项目描述了 2009 年以来的这个问题,但这个链接似乎只有在我没有登录到 Microsoft Connect 时才有效。这意味着,我不能投票或评论... http://connect.microsoft.com/VisualStudio/feedback/details/472592/tab-cycling-through-controls-with-usercontrol-on-toolstrip-doesnt -按预期执行

0 投票
1 回答
272 浏览

c# - 在上下文菜单条中选择单选按钮列表时如何访问事件?

我正在使用ToolStripControlHost在ContextMenuStrip中创建单选按钮,这种方式

对于此列表中的单选按钮,我需要一个类似于CheckedChanged的​​事件,以便在选中其中一个按钮时执行一些操作。

做这个的最好方式是什么?因为我不能将此事件与ToolStripControlHost一起使用。

0 投票
1 回答
654 浏览

c# - 如何将自定义控件显示为下拉窗口?

我想将我的自定义控件(例如:)显示monthcalendar为下拉(弹出)窗口。一种选择是使用ToolStripDropDownand作为msdn 示例ToolStripControlHost中的第二个示例。

我的疑问是:

  1. ToolStripDropDown应该用于ToolStrip物品 - 这是否正确?

  2. 还有其他更好的选择来实现上述要求吗?

0 投票
2 回答
150 浏览

winforms - ToolStipControlHost 中的 ListControl.DataSource 不起作用

我使用 ToolStripControlHost 包装 ListBox 控件以将其添加到 ToolStripDropDown 中,但发现我分配给 ListBox.DataSource 的项目没有显示,并且 ComboBox.DataSource 也不能正常工作,我不明白为什么 ListContorl.DataSource 不能正常工作工具条控制主机。

编辑

我发现问题是 ToolStripDropDown 没有父母提供 BindingContext,所以它会发生在任何使用 DataManager 的控件上。

0 投票
0 回答
183 浏览

winforms - 鼠标悬停时的 ToolStripControlHost 选择

我在开发自定义菜单项时遇到问题。

菜单项托管在 aToolStripControlHost中,其余的只是ToolStripMenuItems.

我想要的是当用户将鼠标悬停在自定义控件上时,像普通的一样被选中ToolStripMenuItem,如下图所示。不幸的是,我没有设法弄清楚这一点。这种行为可能吗?

截屏

编辑:26.10.2015:我一直在玩控件,似乎 ToolStripControlHost 在添加到 ContextMenu 时会在列表中缩小,如下图所示。

我将自定义控件的背景设置为红色,以便更好地查看。只有当鼠标悬停在控件上时,控件才会接收 MouseHover 事件,以红色显示。如果您将鼠标指向左侧或右侧,则 ContextMenu 会接收事件。

ContextMenu 自定义菜单项

这是一个有趣的行为,因为 ToolStripTextBox 或 ToolStripCombobox 不会占用整个从左到右的空间,并且在鼠标悬停时不会突出显示。现在我希望有人知道如何做到这一点。

0 投票
1 回答
843 浏览

c# - 在下拉菜单中显示 ToolStripControlHost 的图像

我有一个 ToolStripSplitButton,下拉列表中有各种元素。其中之一是包含在 ToolStripControlHost 中的 Trackbar,称为 ToolStripTrackbarItem。这是代码(我从stackoverflow得到它):

它有效,但我需要在下拉项目的左侧显示图像:

菜单

通过设置 Image 属性,我成功使用了简单的 ToolStripMenuItem。但是,设置我的 ToolStripTrackbarItem 的 Image 属性(从 ToolStripControlHost 继承,参见上面的代码)是无效的。根据 MSDN,Image 属性与 ToolStripControlHost 无关。

这是什么意思?甚至不可能包含留给 ToolStripControlHost 的图像吗?

如果有可能的话,该怎么做?