C#焦距转移

时间:2014-04-02 13:33:32

标签: c# user-interface scroll focus arrow-keys

我正在尝试在图片框上启用滚动功能。我有一切工作,除了一个唠叨的小细节。第一次单击箭头键时,焦点以无法解释的方式转移到错误的滚动条。图片框有两个滚动条,当显示的图片太大时,它们会变得可见。如果图片放在框内,则不显示滚动条,垂直箭头键的行为与向上/向下翻页键相同。

在图片框上的鼠标按下事件中,我将焦点设置为图片框对象,以便用户可以使用鼠标滚轮滚动。然后,用户可以以三种方式之一移动图像。他们可以单击并按住并向上/向下/向右/向左拖动,或者可以使用鼠标滚轮垂直滚动,也可以使用箭头键在所有四个方向上滚动。如果他们使用箭头键我在滚动条上检查PreviewKeyDownEvent哪个键,如果是向上/向下或向右/向左箭头键,我将焦点设置在水平或垂直滚动​​条上。

问题是(我在调试器中看到)当按下向下键时(作为示例),PreviewKeyDownEvent处理程序运行并设置焦点(在这种情况下为verticalBar.Focus())我看到焦点转移到垂直滚动条,但是一旦范围离开事件处理程序,它就会转移到相反的滚动条(在这种情况下是水平)

我正在将表单写入第三方应用程序,因此我可以看到焦点转到某些默认控件是由某些外部函数引起的。奇怪的是它始终与我刚设置的相反的滚动条;垂直,如果我想水平和水平,如果我想要垂直。一旦焦点位于任一滚动条上,再次单击箭头键会将焦点移动到正确的滚动条,然后事情将适当地运行。

如果焦点已经打开一个滚动条或另一个滚动条,它将按预期工作。焦点将适当地在它们之间来回移动。但是如果焦点从图片框开始,它将始终在第一次点击时设置为错误的栏。

我是C#和GUI的新手,所以任何建议都会非常感激。

感谢

0 个答案:

没有答案