我有一个带有多个ComboBox控件的调用日志表单。
为了加快数据输入速度,将根据以前的字段为某些字段选择默认值。其中一些默认值很可能是真的,所以我希望在选项卡顺序中完全跳过默认字段。
例如,username字段设置成员资格类型字段的值。如果用户是成员,那么成员资格ComboBox将始终是成员,因此不应该是TabStop,但是如果用户名是“非成员”,则有几种选择,所以应该是TabStop。
在username的SelectedIndexChanged事件中,我有逻辑来设置成员类型的TabStop,但是因为成员类型是下一个字段,所以在这里设置它们为时已晚。选项卡处理已经开始,无论该字段上的TabStop是什么,焦点字段都将设置为成员类型。
我不能使用焦点事件,因为它们也会在用户单击字段时触发,并且它应该仍然会激活。只有制片才能生效。
发布于 2014-04-01 18:54:59
经过一些修改后,我想出了以下的解决方案,但我之前找不到任何张贴在上面的东西,所以我发布它,以防它帮助其他人。我正在表单级别上重写ProccessTabKey,以检查WinForms是否出错。
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;
}https://stackoverflow.com/questions/22794483
复制相似问题