我有一个带有几个tabpages的tabcontrol。我还连接到InputPanel.EnabledChanged事件,以便在启用inputpanel时tabcontrol调整大小。我想要做的是确保在调整标签页大小时可以看到具有焦点的控件。什么是实现这一目标的最佳方式。请注意,我使用的是.NET Compact Framework。
谢谢, MRB
答案 0 :(得分:1)
您需要/可能想要在这里跟踪一些事情:
•当前滚动位置
•敲击它时,轻敲元素的位置(我假设一个文本框)
请注意,InputPanel的EnabledChanged事件很容易处理(我假设你已经完成了):检查InputPanel的Enabled状态并对tabcontrol的高度执行+ =或 - =所以InputPanel不包含任何内容起来。
我的理解是你的问题实际上是确定文本框的位置,因为最糟糕的情况是当tabcontrol调整大小时它将被移出屏幕。
我相信(不是100%肯定)调整tabcontrol的大小会使tabcontrol内容的顶部可见,你必须向下滚动才能看到任何现在由InputPanel“覆盖”的内容。
你想在EnabledChanged事件中做的是找出被点击的控件的位置(或者被点击的屏幕坐标 - 对你来说最简单的)。如果它属于(ClientSize.Height-InputPanel.Bounds.Height,ClientSize.Height)的危险区域,则需要调整滚动。
这是半C#-half-pseudocode但是你应该能够看到我要去哪里:
int yOffset =轻敲控件的顶部y坐标;
if(yOffset> ClientSize.Height-inputPanel.Bounds.Height)
{
int yShift =将所有事情都改变的数量;
Point scrollPosition = AutoScrollPosition;
scrollPosition.Y = scrollPosition.Y - yShift;
AutoScrollPosition = scrollPosition;
}
简而言之,这样做是检查你的InputPanel是否会覆盖所需的控件,如果是,则向上滚动yShift像素,其中yShift可能是inputPanel的整个高度,或者只是几乎不能显示你的控制(无论你想要什么)。
•.NET CF似乎对设置无效滚动规则非常宽容。如果你只能向上滚动10个像素而你告诉它向上滚动100个,它将在10处停止
•屏幕坐标(0,0)是可见屏幕的左上角 - 而不是正在显示的表格。如果您认为(0,0)是表单的顶部,则可能会被绊倒。
答案 1 :(得分:0)
我想到的唯一方法就是通过屏幕上的控制位置计算出来。