关于MultiRow只读状态下不落焦点的问题
MultiRow里面用的都是lablecell,我在前面主画面和模板上的ReadOnly和selectable都设了。现在效果是这样的
首先,焦点在MultiRow之外的任何一个控件上,然后鼠标点击MultiRow,原来控件上的焦点不见了
照理说,MultiRow是只读的,应该不会出现这样的效果的,焦点应该是落不上去的。
求问这个问题该怎么解决 回复 1楼baiwushi的帖子
谢谢您的反馈。
我描述下您的问题,您看我的理解对不对。
您的操作是:
1.MultiRow是只读的,运行起来。
2.点击其他可以落入焦点的控件。
焦点落入。
3.然后点击MultiRow
对此步骤我不太理解的地方,因为Mulitow是只读的,你最初焦点是在哪个控件上,点击其他控件后焦点落入,按照我的理解这种情况是正常的,而且MultiRow是只读的,所以再次点击不能得到焦点。 回复 2楼Alice的帖子
对,Mulitow是只读的,应该是不能得到焦点的,但是点击之后,原先焦点所在的控件上的焦点就丢失了。
但是如果我点击的是Mulitow两侧的滚动条,那么原先焦点所在的控件上的焦点就还在原来的控件上 回复 3楼baiwushi的帖子
请问原先的焦点是如何设置的? 回复 4楼Alice的帖子
不用设啊,别的控件,鼠标点击上去就可以了啊,然后在点击Mulitow 是否可以尝试以下代码,看是否可以解决问题
this.gcMultiRow1.ViewMode = ViewMode.Display;
回复 6楼robert的帖子
好的,我试一下,谢谢了 回复 6楼robert的帖子
试了下 好像不行 我试着用另外的方法去解决吧 看了下,有两种方案
1. 设置GcMultiRow的Enabled属性为False
代码如下,好处是比较简单就可以实现,但是缺点是Scrollbar不能滚动了
this.gcMultiRow1.Enabled = false;
this.gcMultiRow1.DefaultCellStyle.DisabledBackColor = Color.White;
this.gcMultiRow1.DefaultCellStyle.DisabledForeColor = Color.Black;
2. 重写WM_NCHITTEST消息
代码如下,好处是Scrollbar不影响ScrollBar是否可以点,可以精细控制不抢焦点的位置,缺点是代码有点复杂,需要把GcMultiRow控件派生一次。
class MyGcMultiRow : GcMultiRow
{
public MyGcMultiRow()
{
}
public const int WM_NCHITTEST = 0x0084;
protected override void WndProc(ref Message m)
{
if (m.Msg == WM_NCHITTEST)
{
Point point = new Point(LowWord(m.LParam.ToInt32()), HighWord(m.LParam.ToInt32()));
point = PointToClient(point);
if (this.HitTest(point).Type != HitTestType.HorizontalScrollBar &&
this.HitTest(point).Type != HitTestType.VerticalScrollBar)
{
return;
}
}
base.WndProc(ref m);
}
public static ushort LowWord(int value)
{
return (ushort)(value & 0xffff);
}
public static ushort HighWord(int value)
{
return (ushort)((value & 0xffff0000) >> 16);
}
}
希望对你有所帮助
页:
[1]
2