找回密码
 立即注册

QQ登录

只需一步,快速开始

baiwushi

注册会员

12

主题

38

帖子

154

积分

注册会员

积分
154

活字格认证

baiwushi
注册会员   /  发表于:2016-2-16 09:55  /   查看:10657  /  回复:11
MultiRow里面用的都是lablecell,我在前面主画面和模板上的ReadOnly和selectable都设了。
现在效果是这样的
首先,焦点在MultiRow之外的任何一个控件上,然后鼠标点击MultiRow,原来控件上的焦点不见了
       照理说,MultiRow是只读的,应该不会出现这样的效果的,焦点应该是落不上去的。

求问这个问题该怎么解决

11 个回复

倒序浏览
Alice
社区贡献组   /  发表于:2016-2-16 12:25:00
沙发
回复 1楼baiwushi的帖子

谢谢您的反馈。
我描述下您的问题,您看我的理解对不对。
您的操作是:
1.MultiRow是只读的,运行起来。
2.点击其他可以落入焦点的控件。
焦点落入。
3.然后点击MultiRow

对此步骤我不太理解的地方,因为Mulitow是只读的,你最初焦点是在哪个控件上,点击其他控件后焦点落入,按照我的理解这种情况是正常的,而且MultiRow是只读的,所以再次点击不能得到焦点。
请点击评分,对我的服务做出评价!  5分为非常满意!

葡萄城控件服务团队

官方网站: http://www.gcpowertools.com.cn
回复 使用道具 举报
baiwushi
注册会员   /  发表于:2016-2-16 13:40:00
板凳
回复 2楼Alice的帖子

对,Mulitow是只读的,应该是不能得到焦点的,但是点击之后,原先焦点所在的控件上的焦点就丢失了。
但是如果我点击的是Mulitow两侧的滚动条,那么原先焦点所在的控件上的焦点就还在原来的控件上
回复 使用道具 举报
Alice
社区贡献组   /  发表于:2016-2-16 13:41:00
地板
回复 3楼baiwushi的帖子

请问原先的焦点是如何设置的?
请点击评分,对我的服务做出评价!  5分为非常满意!

葡萄城控件服务团队

官方网站: http://www.gcpowertools.com.cn
回复 使用道具 举报
baiwushi
注册会员   /  发表于:2016-2-16 13:45:00
5#
回复 4楼Alice的帖子

不用设啊,别的控件,鼠标点击上去就可以了啊,然后在点击Mulitow
回复 使用道具 举报
robert
金牌服务用户   /  发表于:2016-2-16 14:34:00
6#
是否可以尝试以下代码,看是否可以解决问题
  1. this.gcMultiRow1.ViewMode = ViewMode.Display;
复制代码
回复 使用道具 举报
baiwushi
注册会员   /  发表于:2016-2-16 14:49:00
7#
回复 6楼robert的帖子

好的,我试一下,谢谢了
回复 使用道具 举报
baiwushi
注册会员   /  发表于:2016-2-16 14:56:00
8#
回复 6楼robert的帖子

试了下 好像不行
回复 使用道具 举报
baiwushi
注册会员   /  发表于:2016-2-16 15:38:00
9#
我试着用另外的方法去解决吧
回复 使用道具 举报
robert
金牌服务用户   /  发表于:2016-2-16 17:03:00
10#
看了下,有两种方案

1. 设置GcMultiRow的Enabled属性为False
代码如下,好处是比较简单就可以实现,但是缺点是Scrollbar不能滚动了

  1.             this.gcMultiRow1.Enabled = false;
  2.             this.gcMultiRow1.DefaultCellStyle.DisabledBackColor = Color.White;
  3.             this.gcMultiRow1.DefaultCellStyle.DisabledForeColor = Color.Black;
复制代码

2. 重写WM_NCHITTEST消息
代码如下,好处是Scrollbar不影响ScrollBar是否可以点,可以精细控制不抢焦点的位置,缺点是代码有点复杂,需要把GcMultiRow控件派生一次。
  1.    
  2.     class MyGcMultiRow : GcMultiRow
  3.     {
  4.         public MyGcMultiRow()
  5.         {
  6.         }
  7.         public const int WM_NCHITTEST = 0x0084;

  8.         protected override void WndProc(ref Message m)
  9.         {

  10.             if (m.Msg == WM_NCHITTEST)
  11.             {
  12.                 Point point = new Point(LowWord(m.LParam.ToInt32()), HighWord(m.LParam.ToInt32()));
  13.                 point = PointToClient(point);
  14.                 if (this.HitTest(point).Type != HitTestType.HorizontalScrollBar &&
  15.                     this.HitTest(point).Type != HitTestType.VerticalScrollBar)
  16.                 {
  17.                     return;
  18.                 }
  19.             }
  20.             base.WndProc(ref m);
  21.         }

  22.         public static ushort LowWord(int value)
  23.         {
  24.             return (ushort)(value & 0xffff);
  25.         }
  26.         public static ushort HighWord(int value)
  27.         {
  28.             return (ushort)((value & 0xffff0000) >> 16);
  29.         }
  30.     }
复制代码


希望对你有所帮助

评分

参与人数 1金币 +999 收起 理由
Alice + 999 奖励金币

查看全部评分

回复 使用道具 举报
12下一页
您需要登录后才可以回帖 登录 | 立即注册
返回顶部