问题标签 [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.
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 似乎正在使用它们(退格键在下拉列表中将焦点向上移动,而不是删除文本等)。
谢谢你的帮助
西蒙
c# - ToolstripControlHost 导致工具条在程序执行暂停时不会消失
我正在尝试构建一个自定义 WinForms ToolStripDropDownMenu。我需要自定义菜单项,所以我使用 ToolStripControlHosts。问题是,当菜单打开并且我遇到断点时,菜单不会消失并保持在所有应用程序的顶部。
有没有人遇到过这个问题?这是 Visual Studio 错误吗?
简单的例子:
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
在应用程序启动时它不活动。
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 文件中没有什么不寻常的地方。
c# - 带有自定义 ToolStripControlHost 的 ToolStrip 使选项卡顺序焦点行为怪异
我遇到了一些奇怪的行为。让我尝试解释一下,我将代码精简到最低限度,但我仍然遇到问题。所以首先,我将 VS2013 与 .NET 4.0 一起使用,并且我在 Windows 8.1 上。
所以我有一个通过 a 使用的自定义UserControl
,TextBox
如果ToolStripControlHost
我专注于这个文本框并点击TAB它,它只会循环通过控件到这个文本框的 LEFT。如果我让它集中并点击SHIFT+ TAB,它会循环通过它右侧的按钮。
所以这是我的表格的一个例子。中间的文本框是一个自定义控件。我的代码(尽可能简化)如下所示:
只需创建一个新的 WinForms (.NET4) 项目并按照以下步骤操作即可复制问题:
- 添加新的类文件并粘贴上面的代码。
- 建造
- 将 ToolStrip 添加到表单
- 在 ToolStrip 上添加一个 Button、我的自定义控件和另一个 Button(通过设计器是我一直在做的)
- 跑
一旦运行...
- 专注于自定义控件
- 点击TAB几次,它应该只关注左边的控件。
- 点击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 -按预期执行
c# - 在上下文菜单条中选择单选按钮列表时如何访问事件?
我正在使用ToolStripControlHost在ContextMenuStrip中创建单选按钮,这种方式
对于此列表中的单选按钮,我需要一个类似于CheckedChanged的事件,以便在选中其中一个按钮时执行一些操作。
做这个的最好方式是什么?因为我不能将此事件与ToolStripControlHost一起使用。
c# - 如何将自定义控件显示为下拉窗口?
我想将我的自定义控件(例如:)显示monthcalendar
为下拉(弹出)窗口。一种选择是使用ToolStripDropDown
and作为msdn 示例ToolStripControlHost
中的第二个示例。
我的疑问是:
ToolStripDropDown
应该用于ToolStrip
物品 - 这是否正确?还有其他更好的选择来实现上述要求吗?
winforms - ToolStipControlHost 中的 ListControl.DataSource 不起作用
我使用 ToolStripControlHost 包装 ListBox 控件以将其添加到 ToolStripDropDown 中,但发现我分配给 ListBox.DataSource 的项目没有显示,并且 ComboBox.DataSource 也不能正常工作,我不明白为什么 ListContorl.DataSource 不能正常工作工具条控制主机。
编辑
我发现问题是 ToolStripDropDown 没有父母提供 BindingContext,所以它会发生在任何使用 DataManager 的控件上。
winforms - 鼠标悬停时的 ToolStripControlHost 选择
我在开发自定义菜单项时遇到问题。
菜单项托管在 aToolStripControlHost
中,其余的只是ToolStripMenuItems
.
我想要的是当用户将鼠标悬停在自定义控件上时,像普通的一样被选中ToolStripMenuItem
,如下图所示。不幸的是,我没有设法弄清楚这一点。这种行为可能吗?
编辑:26.10.2015:我一直在玩控件,似乎 ToolStripControlHost 在添加到 ContextMenu 时会在列表中缩小,如下图所示。
我将自定义控件的背景设置为红色,以便更好地查看。只有当鼠标悬停在控件上时,控件才会接收 MouseHover 事件,以红色显示。如果您将鼠标指向左侧或右侧,则 ContextMenu 会接收事件。
这是一个有趣的行为,因为 ToolStripTextBox 或 ToolStripCombobox 不会占用整个从左到右的空间,并且在鼠标悬停时不会突出显示。现在我希望有人知道如何做到这一点。
c# - 在下拉菜单中显示 ToolStripControlHost 的图像
我有一个 ToolStripSplitButton,下拉列表中有各种元素。其中之一是包含在 ToolStripControlHost 中的 Trackbar,称为 ToolStripTrackbarItem。这是代码(我从stackoverflow得到它):
它有效,但我需要在下拉项目的左侧显示图像:
通过设置 Image 属性,我成功使用了简单的 ToolStripMenuItem。但是,设置我的 ToolStripTrackbarItem 的 Image 属性(从 ToolStripControlHost 继承,参见上面的代码)是无效的。根据 MSDN,Image 属性与 ToolStripControlHost 无关。
这是什么意思?甚至不可能包含留给 ToolStripControlHost 的图像吗?
如果有可能的话,该怎么做?