【问题标题】:Set focus to control after datagridview selected index change在datagridview选择索引更改后设置焦点控制
【发布时间】:2018-05-22 10:04:16
【问题描述】:

我已经为这个问题苦苦挣扎了很长时间。

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

  1. 数据网格视图
  2. 带有标签、文本框和按钮控件的表格布局,这些控件是根据在 datagridview 中选择的行设置的

现在要注意的是焦点还必须更改为表格布局中的控件: 如果选中项的状态为 'foo' ,则控件 'foobar' 必须具有焦点,但如果选中的项具有状态 'foofoo' ,则控件 'foofoobar' 必须具有焦点。

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

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

我的猜测是,这与覆盖我的焦点的 Control 类的 taborder setter 有关,但我无法确定是哪个事件触发了 taborder setter。

我试过了:

  1. 覆盖 OnLoad 和 OnLayout 并调用与 SelectionChanged 事件中调用的代码相同的代码
  2. 覆盖 OnLoad 和 OnLayout 并首先设置第 2 行,然后设置第 1 行以触发 SelectionChanged 事件

但没有任何效果。

欢迎提出任何想法。

private void ResultGridView_SelectionChanged(object sender, EventArgs e) {
        SelectInput();
}

private void SetInputFocus() {
    if (isValid) {
        foo.Focus();
    } 
   else {
        foofoo.Focus();
    }

【问题讨论】:

    标签: c# winforms user-controls


    【解决方案1】:

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

    您还可以最初将焦点设置在任何控件上,甚至在带有 Form1_Load 事件的标签页和表格布局上。

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-09-09
      • 1970-01-01
      • 1970-01-01
      • 2012-03-16
      • 2015-04-26
      • 1970-01-01
      • 2011-12-25
      相关资源
      最近更新 更多