首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >选项卡键在saleslogix中添加的windows控件(.Net扩展)中无效

选项卡键在saleslogix中添加的windows控件(.Net扩展)中无效
EN

Stack Overflow用户
提问于 2015-10-14 04:26:31
回答 1查看 96关注 0票数 2

我在一个.Net窗口插件中添加了一个saleslogix窗口表单,所有东西都正常工作,但是在这个控件中按下"Tab“键,而不是继续下一个文本框,该控件将转到下一个插件。

我已经搜索了很多,但找不到这方面的工作,当我在另一个saleslogix窗口插件中添加一个浏览器控件时,这个文本框中的页面中有多个文本框。令我惊讶的是,按下选项卡键,它完美地工作,控制转到下一个文本框。

任何帮助都是非常感谢的。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-10-16 11:37:26

当您在主机应用程序中使用Winforms (和许多其他UI类库)时,这是一个完全正常的问题。导航键,如Tab和游标键以及快捷键击键,无论哪个控件具有焦点,都需要被识别。这样做的一种方法是在每个控件上实现KeyDown事件处理程序。当然,这太痛苦了。

因此,它不是这样工作的,当消息循环接收到击键时,它就会被识别,然后再被分派到带有焦点的控件。重写ProcessCmdKey()方法是实现这一目的的一般方法。基本方法包括导航和识别菜单以及按钮助记符。

问题是,接收和分发消息的不是.NET消息循环。具有循环的是主机应用程序。而且它不了解ProcessCmdKey()方面的bean。所以它不会被调用,导航也不起作用。

它倾向于在WebBrowser中工作,因为它是一个ActiveX控件。它是为了与主机交互而设计的。特别是,它通过协商来决定哪一个人可以处理密钥。IOleInPlaceActiveObject::TranslateAccelerator()法就是这样做的。在.NET和主机应用程序中,很少会编写这样的管道来提供替代。

你可以考虑“过于痛苦”的解决方案,但你不太可能喜欢它的声音。只有一种很好的方法来解决这个问题,您必须调用ShowDialog()来显示您的表单。现在,分派的是.NET循环,Tab和游标键工作得很好。这往往是不受欢迎的建议,对话可能会相当尴尬。如果你很幸运,并且知道你在做什么,并且主机可以处理它(通常不会),那么使用线程可以消除模式的刺痛。询问供应商的意见,特别是线程方面,将是明智的。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/33116632

复制
相关文章

相似问题

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