簡體   English   中英

"如何使多個控件保持焦點?"

[英]How can I keep multiple controls in focus?

我在左側有一個樹視圖。 選擇一個節點會在右側的表格中顯示相關信息。

我能否同時保持右側的樹和任何一個控件(文本框、組合框、復選框)處於焦點位置? 這將使用戶能夠選擇一個字段、進行更改、選擇另一個節點,而無需返回並再次選擇同一字段,只需鍵入並更改同一字段的值。

謝謝。

編輯<\/strong>
我想可以手動實現這樣的行為:

private Control __cFocus;

private void {anyControl}_Focus(object sender, EventArgs e)
{
    __cFocus = (Control)sender;
}

private void treeView1_AfterSelect(object sender, EventArgs e)
{
    __cFocus.Focus();
}

不,你不能同時保持兩個控件的焦點。 但是您可以做的是將焦點設置為樹視圖AfterSelect事件中的目標控件

private void treeView1_AfterSelect(object sender, TreeViewEventArgs e)
{
    textBox1.Focus();
    textBox1.SelectAll();
}

然后在你的文本框中離開,保存更改,如下所示:

private void textBox1_Leave(object sender, EventArgs e)
{
    //save changes here
}

這樣,每當您在樹視圖中選擇一個項目時,請檢查您的文本框以進行更改並根據需要進行保存,然后您將重新關注文本框以供下次編輯

如果要關注它,可以使用usercontrol。 您可以將文本框放在usercontrol上,並使用treeview select上的set屬性在usercontrol上設置此文本框的焦點。

只有一個元素有焦點!

但是我有一個想法可以解決你的問題。 假設你有一個帶有TreeView和TextBox的窗口。 將TreeView的HideSelection屬性設置為false並訂閱AfterSelect事件(如edeperson已經回答),如下所示:

private void OnTreeViewAfterSelect(object sender, TreeViewEventArgs e)
{
    textBox1.Text = e.Node.Text;
    textBox1.Focus();
}

然后訂閱TextBox的KeyDown事件並在事件方法中執行以下操作:

private void OnTextBoxKeyDown(object sender, KeyEventArgs e)
{
    if ((e.KeyCode == Keys.Up) || (e.KeyCode == Keys.Down))
    {
        treeView1.Focus();
        SendKeys.Send(e.KeyCode == Keys.Up ? "{UP}" : "{DOWN}");
    }
}

最后訂閱TextBox的Leave事件並在事件方法中執行以下操作:

private void OnTextBoxLeave(object sender, EventArgs e)
{
    if (treeView1.SelectedNode != null)
    {
        treeView1.SelectedNode.Text = textBox1.Text;
    }
}

而且,它應該像你期望的那樣工作......

如果您可以通過在 WPF 中設置 FocusManager.IsFocusScope="True" 來設置 2 個或更多元素的焦點,則在您想要焦點的元素上,然后在每個元素上拉應用: .Focus() 在您的代碼中,您很好去。 附加信息: https ://docs.microsoft.com/es-es/dotnet/api/system.windows.input.focusmanager.isfocusscope?view=windowsdesktop-6.0

不,你可能沒有,在任何給定的時間只有一個控件可能是焦點。

請參閱Moonlight的評論,了解實現您所尋求行為的一種方法。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM