2011-08-01 12 views
0

WPF C#デスクトップアプリケーションがあり、カスタムダイアログウィンドウがポップアップします。ダイアログウィンドウには、私がフォーカスしたいと思っているTextBoxがあります。ポップアップすると、移動してカーソルをポイントすることなく何かを入力することができます。TextBoxをカスタムダイアログボックスにフォーカスする方法

ダイアログボックスがこのように書き背後にあるコードでクラス(ない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(); 
}); 

[ANSWER]

がダイアログを表示する前に注力する必要があります。

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

tb.UpdateLayout(); tb.Focus();これを試してください – Damith

+0

UIのテキストボックスを確認できますか? –

+0

いいえ、動作しません。 – KMC

答えて

1

あなたはOnLoadedイベントをオーバーライドして、そこにテキストボックスを集中することができます:ウィンドウの内容は、まだレンダリングされていないため、テキストボックスが注目されていない

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

    tb.Focus(); 
    tb.SelectAll(); 
} 
+0

@Faciu:ダイアログボックスクラスにOnLoadイベントがあります。 – KMC

0

。 CustomDialogクラスのLoadedイベントを使用してテキストボックスにフォーカスを当ててください。イベント処理メソッドをLoadedイベントに接続し、そのメソッドでテキストボックスをフォーカスします。

0

私は、ポップアップダイアログボックスでテキストボックスを「フォーカス」しようとしましたが、機能しませんでした。 Form.ShowDialog()を呼び出す前に、ボックスにフォーカスを当てようとしました。

上記のいずれも機能しませんでした。ここで

は私のために働いていたものです:

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

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

//display the form 
myForm.ShowDialog(); 

は、このことができます願っています!

関連する問題