我遇到了一些奇怪的行为。让我尝试解释一下,我将代码精简到最低限度,但我仍然遇到问题。所以首先,我将 VS2013 与 .NET 4.0 一起使用,并且我在 Windows 8.1 上。
所以我有一个通过 a 使用的自定义UserControl
,TextBox
如果ToolStripControlHost
我专注于这个文本框并点击TAB它,它只会循环通过控件到这个文本框的 LEFT。如果我让它集中并点击SHIFT+ TAB,它会循环通过它右侧的按钮。
所以这是我的表格的一个例子。中间的文本框是一个自定义控件。我的代码(尽可能简化)如下所示:
[ToolStripItemDesignerAvailability(ToolStripItemDesignerAvailability.ToolStrip | ToolStripItemDesignerAvailability.StatusStrip)]
public class ToolStripTestControl : ToolStripControlHost
{
public ToolStripTestControl() : this(new TestControl()) { }
public ToolStripTestControl(Control c) : base(c) { }
}
public class TestControl : UserControl
{
private TextBox _textBox = new TextBox();
public TestControl()
{
_textBox.Dock = DockStyle.Fill;
this.Controls.Add(_textBox);
}
protected override Size DefaultMinimumSize { get { return new Size(100, 22); } }
}
只需创建一个新的 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 -按预期执行