在datagridview选择索引更改后将焦点设置为控制

时间:2018-05-22 10:04:16

标签: c# winforms user-controls

我现在很长时间都在努力解决这个问题。

我在标签页中有一个用户控件,其中包含:

  1. datagridview的
  2. 带有标签,文本框和按钮控件的tablelayout,它们是根据datagridview中选择的行设置的
  3. 现在问题是焦点也必须更改为tablelayout中的控件: 如果所选项目的状态为'foo',则控制'foobar'必须具有焦点,但如果所选项目的状态为'foofoo',则控制'foofoobar'必须具有焦点。

    我通过使用SelectionChanged事件来处理这个问题。

    如果我手动点击所选项目,这一切都正常。 最初加载控件并选择第一行时,焦点设置不正确。

    我的猜测是,这与控制类的taborder setter有关,它覆盖了我的焦点,但我无法弄清楚哪个事件会触发taborder setter。

    我试过了:

    1. 覆盖OnLoad和OnLayout并调用与SelectionChanged事件中调用的代码相同的代码
    2. 覆盖OnLoad和OnLayout并首先设置第二行,之后我设置第一行以触发SelectionChanged事件
    3. 但没有任何作用。

      欢迎任何想法。

      private void ResultGridView_SelectionChanged(object sender, EventArgs e) {
              SelectInput();
      }
      
      private void SetInputFocus() {
          if (isValid) {
              foo.Focus();
          } 
         else {
              foofoo.Focus();
          }
      

1 个答案:

答案 0 :(得分:2)

将焦点设置在YourTabControl_Layout事件中,就像在SelectionChanged事件中一样。

您最初也可以在任何控件上设置焦点,即使在带有Form1_Load事件的tabpage和tablelayout上也是如此。

    private void Form1_Load(object sender, EventArgs e)
    {
        ActiveControl = SomeControl;
    }

    private void YourTabControl_Layout(object sender, LayoutEventArgs e)
    {
        if (YourTabControl.SelectedIndex == 0)
            SomeControl.Focus();
    }