2009-08-12 53 views
0

我正在接受並驗證地址的用戶控件。這些地址都在特定的域(特別是澳大利亞)內。用戶控件如何將焦點傳遞給父窗體上的控件?

在地址用戶控件中,我有三個字段:郊區,州和郵編(又名郵編)。

當用戶鍵入郊區名稱的一部分並點擊TAB並進入狀態字段時,我查詢數據庫以查看是否可以理解部分郊區。如果可以,我填寫完整的郊區,州和郵政編碼。例如,澳大利亞只有一個名爲「BORONIA」的郊區,因此用戶可以鍵入「BONON」,打TAB,表格中填入「BORONIA」,「VIC」和「3155」。

我得到的問題是,填充這些字段後,我想跳過狀態和郵政編碼字段,然後轉到窗體上的下一個控件。因爲這些地址字段在用戶控件中,所以我實際上想要將焦點設置爲父窗體上的下一個控件。

我知道那個控件是什麼,但是既沒有.Focus()也沒有.Select()似乎移動了焦點。數據庫查詢和字段填充在狀態字段的Enter事件中完成。

我有一個不是用戶控件的同一地址處理邏輯的早期版本:它在數據輸入表單上都是內聯的,在這種情況下一切正常。在狀態字段的Enter方法中,我可以將控制傳遞給下一個字段。

但是,當我將它重構爲用戶控件時,它失敗了。任何人都可以將我推向正確的方向嗎?

編輯:我應該注意到,我可以將焦點傳遞給我的用戶控件中的其他控件,所以我知道基本邏輯是正確的。這就是爲什麼我相信這是關於用戶控件和父控件,而不是我的控件選擇和.Select()調用。

回答

3

我做了。類似的東西而回,它應該看起來像:

private void InputsUserControl_Load(object sender, EventArgs e) 
{ 
    altNameTextBox.GotFocus += new EventHandler(altNameTextBox_GotFocus); 
} 

void altNameTextBox_GotFocus(object sender, EventArgs e) 
{ 
    string s = nameTextBox.Text.Trim(); 

    if (!string.IsNullOrEmpty(s)) 
    { 
     this.Parent.SelectNextControl(this, true, true, true, false); 
    } 

} 

注意的GotFocus未在屬性窗口中列出了輸入事件,這並不工作,這就是所謂的太早

+0

謝謝Henk。這工作完美。 – Andrew 2009-08-13 00:07:14

0

您是否試圖設置控件本身的焦點?我會嘗試將重點放在控件中的文本框上。

+0

否 - 問題是相反的。用戶控件正在嘗試將焦點設置爲父控件上的文本框 – Andrew 2009-08-12 03:06:32

+0

像nextcontrol.SuburbTextbox.Focus(); – SwDevMan81 2009-08-12 03:10:22

+0

好吧,它更像是AddressControl試圖將焦點設置到父窗體的EditBusinessHoursPhone文本框中。我已經通過一個屬性將該控件傳遞給AddressControl,根據調試器它是正確的。但是,當我調用.Focus()或.Select()該控件焦點不會更改。 – Andrew 2009-08-12 03:13:25

3

或許可以讓用戶控制觸發事件時,它的完成,以及 頁面形式可以通過設置焦點在那裏它需要處理該事件......

+0

這就是我向右傾斜現在,但似乎凌亂。 – Andrew 2009-08-12 04:04:44

0

我有點模糊的具體細節,因爲我已經轉向WPF,不再做太多的ASP.NET,但你應該能夠從用戶控件調用Page變量。 ((文本)Page.FindControl(「txtMyTextbox))焦點();可能做到這一點

否則你很可能折騰一個JavaScript函數在頁面中做到這一點,只是調用

+0

它是WinForms,而不是ASP.Net。 – Andrew 2009-08-12 04:04:12

0

您可以使用f控制用戶控件中TAB的行爲下面的代碼。 在這種情況下,TAB鍵將下一個控件集中在父窗體或用戶控件中。

protected override bool ProcessDialogKey(Keys keyData) 
     { 
      if (keyData != Keys.Tab) 
      { 
       return base.ProcessDialogKey(keyData); 
      } 
      Parent.SelectNextControl(this, true, true, false,false); 
      return false; 
     } 
相關問題