在 datagridview 选定的索引更改后将焦点设置为控件
Set focus to control after datagridview selected index change
这个问题我纠结了很久。
我在标签页中有一个用户控件,其中包含:
- 数据网格视图
- 带有标签、文本框和按钮控件的表格布局,这些控件是根据在数据网格视图中选择的行设置的
现在要注意的是,焦点还必须更改为表格布局中的控件:
如果所选项目具有状态 'foo' ,则控件 'foobar' 必须具有焦点,但如果所选项目具有状态 'foofoo',则控件 'foofoobar' 必须具有焦点。
我使用 SelectionChanged 事件来处理这个问题。
这一切正常,如果我手动单击所选项目。
最初加载控件并选择第一行时,焦点设置不正确。
我的猜测是,这与控件 class 的 taborder setter 有关,它覆盖了我的焦点,但我无法弄清楚哪个事件触发了 taborder setter。
我试过了:
- 覆盖 OnLoad 和 OnLayout 并调用与在 SelectionChanged 事件中调用的代码相同的代码
- 覆盖 OnLoad 和 OnLayout 并首先设置第 2 行,然后设置第 1 行以触发 SelectionChanged 事件
但是没有任何效果。
欢迎提出任何想法。
private void ResultGridView_SelectionChanged(object sender, EventArgs e) {
SelectInput();
}
private void SetInputFocus() {
if (isValid) {
foo.Focus();
}
else {
foofoo.Focus();
}
像在 SelectionChanged 事件中一样在 YourTabControl_Layout 事件中设置焦点。
您还可以将焦点最初设置在任何控件上,甚至在带有 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();
}
这个问题我纠结了很久。
我在标签页中有一个用户控件,其中包含:
- 数据网格视图
- 带有标签、文本框和按钮控件的表格布局,这些控件是根据在数据网格视图中选择的行设置的
现在要注意的是,焦点还必须更改为表格布局中的控件: 如果所选项目具有状态 'foo' ,则控件 'foobar' 必须具有焦点,但如果所选项目具有状态 'foofoo',则控件 'foofoobar' 必须具有焦点。
我使用 SelectionChanged 事件来处理这个问题。
这一切正常,如果我手动单击所选项目。 最初加载控件并选择第一行时,焦点设置不正确。
我的猜测是,这与控件 class 的 taborder setter 有关,它覆盖了我的焦点,但我无法弄清楚哪个事件触发了 taborder setter。
我试过了:
- 覆盖 OnLoad 和 OnLayout 并调用与在 SelectionChanged 事件中调用的代码相同的代码
- 覆盖 OnLoad 和 OnLayout 并首先设置第 2 行,然后设置第 1 行以触发 SelectionChanged 事件
但是没有任何效果。
欢迎提出任何想法。
private void ResultGridView_SelectionChanged(object sender, EventArgs e) {
SelectInput();
}
private void SetInputFocus() {
if (isValid) {
foo.Focus();
}
else {
foofoo.Focus();
}
像在 SelectionChanged 事件中一样在 YourTabControl_Layout 事件中设置焦点。
您还可以将焦点最初设置在任何控件上,甚至在带有 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();
}