这个本应该在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事件:
- Public Class MyMultirow
- Inherits GrapeCity.Win.MultiRow.GcMultiRow
- Protected Overrides Sub OnLostFocus(ByVal e As System.EventArgs)
- MyBase.OnLostFocus(e)
-
- Me.BeginInvoke(New Action(AddressOf SetVisible))
- End Sub
- Private Sub SetVisible()
- If Not Me.IsCurrentCellInEditMode Then
- Me.Visible = False
- Else
- Me.Visible = True
- End If
- End Sub
- End Class
复制代码 如果这三个方法都不能用, 请你详细描述一下B的设置情况,跟编辑状态相关的设置。
最好上传一个工程,我看看。 |