2011-08-01 21 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中的Textbox嗎? –

+0

不,不起作用。 – KMC

回答

1

您可以覆蓋裝載的事件和焦點的文本框在那裏:

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

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

@Faciu:在對話框類中有OnLoad事件。 – KMC

0

文本框沒有對準,因爲窗口的內容尚未呈現。嘗試使用CustomDialog類的Loaded事件來聚焦文本框。將事件處理方法連接到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(); 
} 
0

我只是想補充一點,我試圖在一個彈出式對話框中「關注」一個文本框,但它不工作。 我試圖在我調用Form.ShowDialog()之前重點對話框。

以上都不奏效。

這裏是我工作:

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

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

//display the form 
myForm.ShowDialog(); 

希望這有助於!