C#从自定义属性网格转到选项卡顺序中的下一个控件
本文关键字:顺序 下一个 控件 选项 自定义属性 网格 | 更新日期: 2023-09-27 18:22:10
在我们的应用程序中,我们有一个属性网格,用户可以使用它来编辑一些数据,我被告知用户可以通过选项卡查看的属性网格将非常有用。因此,我创建了一个属性网格,用户可以通过它浏览所有数据。问题是,在他们浏览完所有数据后,我希望下一次按tab键转到选项卡顺序的下一个控件。
属性网格位于选项卡顺序的中间。我试图调整这里的解决方案:验证文本框文本和增加标签顺序一次,但没有成功。
属性网格中如何处理选项卡的代码:
protected override bool ProcessKeyPreview(ref Message m)
{
int wParam = m.WParam.ToInt32();
switch (m.Msg)
{
case WM_KEYDOWN:
{
if (wParam == SHIFT)
{
isShiftDown = true;
return true;
}
}
break;
case WM_KEYUP:
{
if (wParam == TAB)
{
moveSelectedGridItem(!isShiftDown);
return true;
}
else if (wParam == SHIFT)
{
isShiftDown = false;
return true;
}
}
break;
}
return ProcessKeyEventArgs(ref m);
}
我已经尝试了一种变通方法,如果您有任何问题,请仔细查看并回复我。
protected override bool ProcessKeyPreview(参考消息m){int wParam=m.wParam.ToInt32();
switch (m.Msg)
{
case WM_KEYDOWN:
{
if (wParam == SHIFT)
{
isShiftDown = true;
return true;
}
}
break;
case WM_KEYUP:
{
if (wParam == TAB)
{
bool ismoved = moveSelectedGridItem(!isShiftDown);
// First: modify the method "moveSelectedGridItem" to return bool value (if grid moved: true, if TAB pressed after last grid item: false)
if(!ismoved)
// handle your implementaion here
return true;
}
else if (wParam == SHIFT)
{
isShiftDown = false;
return true;
}
}
break;
}
return ProcessKeyEventArgs(ref m);
}
我认为您所描述的行为不是WinForm控件的标准行为,通常情况下,如果光标在处理TAB
的控件"内部",则用户必须在迭代到下一个控件之前按ESC
。否则,您必须实现RaiseSomeEventToParentControl之类的东西,我认为不可能或不建议这样做。