2009-08-12 264 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; 
     } 
相关问题