首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在SelectedIndexChanged中更改SelectedIndexChanged太晚了

在SelectedIndexChanged中更改SelectedIndexChanged太晚了
EN

Stack Overflow用户
提问于 2014-04-01 18:54:59
回答 1查看 78关注 0票数 0

我有一个带有多个ComboBox控件的调用日志表单。

为了加快数据输入速度,将根据以前的字段为某些字段选择默认值。其中一些默认值很可能是真的,所以我希望在选项卡顺序中完全跳过默认字段。

例如,username字段设置成员资格类型字段的值。如果用户是成员,那么成员资格ComboBox将始终是成员,因此不应该是TabStop,但是如果用户名是“非成员”,则有几种选择,所以应该是TabStop。

在username的SelectedIndexChanged事件中,我有逻辑来设置成员类型的TabStop,但是因为成员类型是下一个字段,所以在这里设置它们为时已晚。选项卡处理已经开始,无论该字段上的TabStop是什么,焦点字段都将设置为成员类型。

我不能使用焦点事件,因为它们也会在用户单击字段时触发,并且它应该仍然会激活。只有制片才能生效。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-04-01 18:54:59

经过一些修改后,我想出了以下的解决方案,但我之前找不到任何张贴在上面的东西,所以我发布它,以防它帮助其他人。我正在表单级别上重写ProccessTabKey,以检查WinForms是否出错。

代码语言:javascript
复制
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;
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/22794483

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档