Как сфокусировать TextBox в настраиваемом диалоговом окне - PullRequest
0 голосов
/ 01 августа 2011

У меня есть настольное приложение WPF C # и всплывающее диалоговое окно.Диалоговое окно имеет TextBox, на котором я хотел бы сфокусироваться, чтобы, как только оно всплывало, я мог что-то напечатать на нем, не двигая и не наводя курсор.

DialogBox пишется как класс в кодепозади (не XAML), который выглядит следующим образом:

public partial class MainWindow : Window
{
    public MainWindow()
    {
        InitializeComponent();

        CustomDialog dlg = new CustomDialog();
        dlg.ShowBox();  // after the dialog box pops up, focus on the textbox.
    }
}

public partial class CustomDialog : Window
{
    ....
    TextBox tb = new TextBox();
    ....
    public void ShowBox()
    {
       ....
       /* I want to focus on the tb as soon as CustomDialog.ShowBox() is called */
       ....
    }
}

Я пробовал все следующие, но ни один из них не работает:

1. tb.Focus();
2. Keyboard.Focus(tb);
3. FocusManager.SetIsFocusScope(tb, true);
4. Dispatcher.BeginInvoke((ThreadStart)delegate
{
   tb.Focus();
});

[ОТВЕТ]

Перед отображением диалогового окна необходимо сфокусироваться:

tb.Focus();
window.ShowDialog();

Ответы [ 3 ]

1 голос
/ 01 августа 2011

Вы можете переопределить событие OnLoaded и сфокусировать текстовое поле там:

protected override void OnLoad(EventArgs e)
{
   base.OnLoad();

   tb.Focus();
   tb.SelectAll();
}
0 голосов
/ 03 марта 2017

Я просто хотел добавить, что я пытался «сфокусировать» текстовое поле во всплывающем диалоговом окне, и оно не работало. Я пытался сфокусировать поле, прежде чем я вызвал Form.ShowDialog ();

Ничего из вышеперечисленного не сработало.

Вот что у меня сработало:

//add textBox to form
myForm.Controls.Add(myTextBox);

//now select the textbox
myTextBox.Select();

//display the form
myForm.ShowDialog();

надеюсь, это поможет!

0 голосов
/ 09 января 2015

Текстовое поле не фокусируется, потому что содержимое окна еще не было отрисовано.Попробуйте сфокусировать текстовое поле, используя событие Loaded класса CustomDialog.Подключите метод обработки события к событию Loaded и в этом методе выделите текстовое поле.

public partial class CustomDialog : Window
{
    ....
    TextBox tb = new TextBox();
    ....
    public void ShowBox()
    {
       ....
       this.Loaded += CustomDialog_Loaded;
       ....
    }
}

void CustomDialog_Loaded(object sender, RoutedEventArgs e)
{
    tb.Focus();
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...