找回密码
 立即注册

QQ登录

只需一步,快速开始

chenf1980

论坛元老

41

主题

147

帖子

9349

积分

论坛元老

积分
9349

活字格认证

chenf1980
论坛元老   /  发表于:2011-6-28 10:06  /   查看:5313  /  回复:3
现在有一个form,画面上有个MultiRow A,在点击A的单元格的时候,会在该单元格位置弹出一个MultiRow B,实现combobox的模拟下拉选项。
   现在有一个问题,就是在我点击B以外的其他任何地方,如果B已经打开了的话,就visiabled = false,现在用B的lostfocus发现也无法实现效果。

3 个回复

倒序浏览
neil
论坛元老   /  发表于:2011-6-28 11:09:00
沙发

回复 1# chenf1980 的帖子

不清楚你是用什么方式弹出的,请上传示例代码。
回复 使用道具 举报
chenf1980
论坛元老   /  发表于:2011-6-28 13:14:00
板凳
MultiRow B一开始是隐藏的,在点击A里面某个单元格的时候,让B显示出来。然后再点击画面上其他的地方的时候,再让B隐藏,需要这样的效果
回复 使用道具 举报
neil
论坛元老   /  发表于:2011-6-28 14:35:00
地板

回复 3# chenf1980 的帖子

这个本应该在lostfocus中来做, 但是由于Multirow比较复杂,这样做可能需要考虑很多情况。

尤其要注意的是,当Multirow在进入编辑状态的时候, 编辑控件会得到focus,而MultiRow会触发lostfocus事件。  这一点在用户看来,Multirow应该还没有lostfocus。  再加上B的EditMode可能是EditOnEnter, 这就比较难处理了。

这里给你三个解决方法:
1. 如果界面上其他的控件不是很多的话, 考虑在它们得到focus的事件中,把 B 隐藏起来。(首选)

2. 把 B 放在一个panel中, 每次都设置这个panel的visible属性来控制是否隐藏, 然后,在这个panel的下方,再放一个Button, 在这个Button的click事件中来隐藏这个panel。  这实际上是把隐藏B的工作交给了用户。而不是自动隐藏了。

3.  如果B的EditMode不是 EditOnEnter。  而且, B最好是不能编辑的最好。 可以使用如下方法:
重写MultiRow的OnlostFocus方法,  或者处理Multirow的lostfocus事件:

  1. Public Class MyMultirow
  2.     Inherits GrapeCity.Win.MultiRow.GcMultiRow

  3.     Protected Overrides Sub OnLostFocus(ByVal e As System.EventArgs)
  4.         MyBase.OnLostFocus(e)
  5.      
  6.         Me.BeginInvoke(New Action(AddressOf SetVisible))

  7.     End Sub


  8.     Private Sub SetVisible()
  9.         If Not Me.IsCurrentCellInEditMode Then
  10.             Me.Visible = False
  11.         Else
  12.             Me.Visible = True
  13.         End If
  14.     End Sub
  15. End Class
复制代码
如果这三个方法都不能用, 请你详细描述一下B的设置情况,跟编辑状态相关的设置。

最好上传一个工程,我看看。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 立即注册
返回顶部