我遇到了一些奇怪的行爲。讓我試着解釋一下,我將代碼剝離到最低限度,但仍然存在問題。所以首先,我在.NET 4.0中使用VS2013,而在Windows 8.1上。帶自定義ToolStripControlHost的ToolStrip使得Tab鍵順序對焦怪異
所以我有一個自定義UserControl
與同時正在通過ToolStripControlHost
使用TextBox
,如果我專注於這個文本框和命中TAB,它只週期通過控制這個文本框的左側。如果我有它的重點和點擊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中添加一個按鈕,我的自定義控制,另一個按鈕(通過設計師的我怎麼一直在做)
- 運行
一旦運行...
- 焦點在自定義控制
- 命中TAB幾次,它應該只專注於左側的控件。
- 點擊SHIFT + TAB幾次,它只會集中在右側。
有誰知道問題是什麼 - 或者我該如何解決這個問題?我一整天都在試圖解決這個問題。我終於剝離了我的代碼,我似乎無法使其工作。我甚至試圖覆蓋大部分的功能並自己做,但這成了一場噩夢。
謝謝!
更新1:所以一些額外的tid-bits。
如果我將自定義控件更改爲從TextBox而不是UserControl繼承,則tabbing/focus按預期工作。
如果我改變它是一個Control
代替UserControl
互聯工作正常,爲好,但重點絕不是我的內心文本框內獲得 - 焦點似乎丟失(或可能在外部母公司控制,但不被傳遞到內部TextBox)。
我看到添加了一個MS Connect項目,該項目從2009年開始描述這個問題,但如果我沒有登錄到Microsoft Connect,此鏈接似乎工作。這意味着,我不能對它投票或評論... http://connect.microsoft.com/VisualStudio/feedback/details/472592/tab-cycling-through-controls-with-usercontrol-on-toolstrip-doesnt-perform-as-expected
哇,我花了好幾天這方面的工作。我嘗試覆蓋我的ToolStrip控件和'UserControl'父項上的'OnGotFocus'和'OnLostFocus'的每個組合,以將焦點傳遞給子控件。甚至嘗試通過在referencesource.microsoft.com上結合一些來自.NET源代碼的組件來構建自己的複合控件。它最終被固定在這一行(ok 3行)。感謝漢斯,這正是我期待的 - 而且比我預期的要簡單得多! –
必須等待13個小時才能獲得賞金,但這是你的兄弟! –