簡體   English   中英

是否有鍵盤快捷鍵可以專注於已知的Tabindex

[英]Is there a Keyboard Shortcut to Focus on a Known Tabindex

當Windows窗體具有焦點時,您可以通過按{TAB}鍵,以Tabindex順序瀏覽將TabStop屬性設置為True的所有控件。

同樣,您可以使用{Shift + TAB}以相反的順序瀏覽它們

是否有任何鍵盤快捷鍵可將焦點移到已知的或絕對的Tabindex(例如最低或最高),而不是將其相對於活動控件移動?

如果是這樣,MS是否可以在任何地方對此進行記錄?

AFAIK沒有開箱即用的功能。 您需要自己做。 但是,這並不困難,您只需要通過重寫ProcessCmdKey方法來檢查熱鍵,然后為適當的控件調用Control.Focus()

protected override bool ProcessCmdKey(ref Message msg, Keys keyData)
{
    if (keyData == (Keys.Control | Keys.D1))
    {
        textBox1.Focus();
        return true;
    }
    return base.ProcessCmdKey(ref msg, keyData);
}

您甚至可以更進一步,以擁有多個控件的快捷方式,並且還可以通過擁有包含快捷鍵和要關注的控件的字典來在運行時管理控件及其快捷鍵:

Dictionary<Keys, Control> FocusShortcuts;

public Form1()
{
    InitializeComponent();

    FocusShortcuts = new Dictionary<Keys, Control>();
    FocusShortcuts.Add(Keys.Control | Keys.D1, textBox1);
    FocusShortcuts.Add(Keys.Control | Keys.D2, textBox2);
    FocusShortcuts.Add(Keys.Control | Keys.D3, textBox3);
}

protected override bool ProcessCmdKey(ref Message msg, Keys keyData)
{
    Control control;
    if (FocusShortcuts.TryGetValue(keyData, out control))
    {
        control.Focus();
        return true;
    }
    return base.ProcessCmdKey(ref msg, keyData);
}

更新

相反,如果要通過其Tab鍵將焦點設置為控件,則可以替換textBox1.Focus(); 像這樣:

int someIndex = 5;
Control control = this.Controls.OfType<Control>()
                      .FirstOrDefault(c => c.TabIndex == someIndex);
if (control != null) control.Focus();

你只需要的值更改someIndex到您選擇的指數和改變this與控制的容器(你可以離開它,如果容器是當前表單/用戶控件)。

暫無
暫無

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

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