我有一个带有多个ComboBox控件的通话记录表单。
为了加速数据输入,根据以前的字段为某些字段选择默认值。其中一些默认值很可能是真的,所以我希望在Tab键顺序中完全跳过默认字段。
例如,用户名字段设置成员资格类型字段的值。如果用户是成员,那么成员ComboBox将始终是成员,因此它不应该是TabStop,但如果用户名是“非成员”,则有一些选择,因此它应该是TabStop。
在用户名的SelectedIndexChanged事件中,我有逻辑来设置成员资格类型的TabStop,但因为成员资格类型是用户名设置后的下一个字段,所以为时已晚。选项卡处理已经开始,无论该字段上的TabStop是什么,焦点字段都将设置为成员资格类型。
我无法使用焦点事件,因为当用户点击该字段时它们也会触发,然后它仍应激活。只有标签才能生效。
答案 0 :(得分:0)
protected override bool ProcessTabKey(bool forward)
{
//find out where we are
Control startingFocus = this.ActiveControl;
//go to the next control
SelectNextControl(startingFocus, forward, true, true, true);
//find out if we still wanted to go there, (tabstop might have been changed in a SelectedIndexChanged)
Control newNext = GetNextControl(startingFocus, forward);
while (!newNext.TabStop)
{
newNext = GetNextControl(newNext, forward);
}
//if we are in the wrong place, move to the right place
if (this.ActiveControl != newNext)
{
newNext.Focus();
}
return true;
}