找回密码
 立即注册

QQ登录

只需一步,快速开始

sxyweiren

中级会员

73

主题

366

帖子

755

积分

中级会员

积分
755

活字格认证微信认证勋章

sxyweiren
中级会员   /  发表于:2016-1-12 20:30  /   查看:12599  /  回复:8
现有一Form,Form里面有两个MultiRow,左边的是mlsREJI,右边的是mlsReji2

画面启动后,用鼠标点击mlsReji2的第二列,会弹出一个MsgBox。
关闭MsgBox后重复上面的操作,第二次后mlsReji2的第二列的单元格处于编辑状态的时候光标移动到了第一个MR。

现在怀疑光标移动到第一个Mr的同时,第二个MR保持着编辑状态。
有没有好的办法能让光标移动到第一个MR的同时,第二个Mr的编辑状态变成选择模式。


  1. Public Class Mr_NewCellPositionNeeded

  2.     Private Sub Form2_Load(sender As Object, e As EventArgs) Handles MyBase.Load
  3.         Dim tmplate As New GrapeCity.Win.MultiRow.Template
  4.         tmplate.Clear()
  5.         tmplate.Width = mlsREJI.Width
  6.         tmplate.Row.Width = tmplate.Width
  7.         tmplate.Row.Height = 21
  8.         tmplate.Row.Cells.Add(New GrapeCity.Win.MultiRow.InputMan.GcTextBoxCell)
  9.         tmplate.Row.Cells.Add(New GrapeCity.Win.MultiRow.InputMan.GcNumberCell)
  10.         tmplate.Row.Cells(1).Location = New Point(tmplate.Row.Cells(0).Size.Width, 0)
  11.         mlsREJI.Template = tmplate
  12.         mlsREJI.AllowUserToAddRows = False
  13.         mlsREJI.AllowUserToResize = False
  14.         mlsREJI.AllowUserToDeleteRows = False
  15.         mlsREJI.AllowUserToAutoFitColumns = False
  16.         mlsREJI.RowCount = 3
  17.         mlsREJI.EditMode = GrapeCity.Win.MultiRow.EditMode.EditOnEnter
  18.         With CType(mlsREJI.Template.Row.Cells(1), GrapeCity.Win.MultiRow.InputMan.GcNumberCell)
  19.             .SideButtons.Clear()
  20.         End With

  21.         Dim tmplate2 As GrapeCity.Win.MultiRow.Template = tmplate.Clone
  22.         With CType(tmplate2.Row.Cells(1), GrapeCity.Win.MultiRow.InputMan.GcNumberCell)
  23.             Dim NumberDecimalPartDisplayField1 As GrapeCity.Win.MultiRow.InputMan.NumberDecimalPartDisplayField = New GrapeCity.Win.MultiRow.InputMan.NumberDecimalPartDisplayField()
  24.             Dim NumberDecimalSeparatorDisplayField1 As GrapeCity.Win.MultiRow.InputMan.NumberDecimalSeparatorDisplayField = New GrapeCity.Win.MultiRow.InputMan.NumberDecimalSeparatorDisplayField()
  25.             .SideButtons.Clear()
  26.             NumberDecimalPartDisplayField1.MaxDigits = 0
  27.             Dim NumberIntegerPartDisplayField1 As GrapeCity.Win.MultiRow.InputMan.NumberIntegerPartDisplayField = New GrapeCity.Win.MultiRow.InputMan.NumberIntegerPartDisplayField()
  28.             Dim NumberSignDisplayField3 As GrapeCity.Win.MultiRow.InputMan.NumberSignDisplayField = New GrapeCity.Win.MultiRow.InputMan.NumberSignDisplayField()
  29.             NumberIntegerPartDisplayField1.GroupSizes = New Integer() {3, 3, 0}
  30.             NumberSignDisplayField3.PositivePattern = "元"
  31.             .DisplayFields.Clear()
  32.             .DisplayFields.Add(NumberIntegerPartDisplayField1)
  33.             .DisplayFields.Add(NumberDecimalSeparatorDisplayField1)
  34.             .DisplayFields.Add(NumberDecimalPartDisplayField1)
  35.             .DisplayFields.Add(NumberSignDisplayField3)
  36.             .MaxValue = 99999999
  37.             .Fields.DecimalPart.MaxDigits = 0
  38.             .Fields.IntegerPart.GroupSizes = New Integer() {0}
  39.             .Fields.IntegerPart.MaxDigits = 7
  40.             .Fields.IntegerPart.MinDigits = 1
  41.             .Fields.SignPrefix.NegativePattern = ""

  42.         End With
  43.         mlsReji2.Template = tmplate2
  44.         mlsReji2.AllowUserToAddRows = False
  45.         mlsReji2.AllowUserToResize = False
  46.         mlsReji2.AllowUserToDeleteRows = False
  47.         mlsReji2.AllowUserToAutoFitColumns = False
  48.         mlsReji2.RowCount = 3
  49.         mlsReji2.EditMode = GrapeCity.Win.MultiRow.EditMode.EditOnEnter

  50.         For inci As Integer = 0 To 2
  51.             mlsReji2(inci, 0).Value = CStr(inci)
  52.             mlsReji2(inci, 1).Value = 9999
  53.             mlsREJI(inci, 0).Value = CStr(inci)
  54.             mlsREJI(inci, 1).Value = "9"
  55.         Next
  56.     End Sub


  57.     Private Sub mlsREJI_CellLeave(sender As Object, e As GrapeCity.Win.MultiRow.CellEventArgs) Handles mlsREJI.CellLeave
  58.         RemoveHandler mlsREJI.CellLeave, AddressOf mlsREJI_CellLeave
  59.         If Me.ActiveControl Is mlsREJI OrElse _
  60.             (TypeName(Me.ActiveControl).Contains("GcTextBoxEditingControl") AndAlso CType(Me.ActiveControl, GrapeCity.Win.MultiRow.InputMan.GcTextBoxEditingControl).GcMultiRow Is mlsREJI) OrElse _
  61.             (TypeName(Me.ActiveControl).Contains("GcNumberEditingControl") AndAlso CType(Me.ActiveControl, GrapeCity.Win.MultiRow.InputMan.GcNumberEditingControl).GcMultiRow Is mlsREJI) Then
  62.         Else
  63.             GrapeCity.Win.MultiRow.SelectionActions.MoveToNextCell.Execute(mlsREJI)
  64.             mlsREJI.Focus()
  65.         End If
  66.         AddHandler mlsREJI.CellLeave, AddressOf mlsREJI_CellLeave
  67.     End Sub

  68.     Private Sub mlsREJI_NewCellPositionNeeded(sender As Object, e As GrapeCity.Win.MultiRow.NewCellPositionNeededEventArgs) Handles mlsREJI.NewCellPositionNeeded
  69.         If e.CellIndex = 1 Then

  70.             MsgBox("mlsREJI_NewCellPositionNeeded")
  71.             e.NewCellPosition = New GrapeCity.Win.MultiRow.CellPosition(e.RowIndex, e.CellIndex)
  72.         End If
  73.     End Sub
  74. End Class

复制代码

8 个回复

倒序浏览
Alice
社区贡献组   /  发表于:2016-1-13 11:39:00
沙发
回复 1楼sxyweiren的帖子

谢谢您的反馈。
您的问题我们收到了,调查后给您反馈。
请点击评分,对我的服务做出评价!  5分为非常满意!

葡萄城控件服务团队

官方网站: http://www.gcpowertools.com.cn
回复 使用道具 举报
robert
金牌服务用户   /  发表于:2016-1-13 16:10:00
板凳
> 画面启动后,用鼠标点击mlsReji2的第二列,会弹出一个MsgBox。
我运行的你提供的代码,但是点击mlsReji的第二列的时候并没有弹出MsgBox。是否可以提供一个直接可以用VisualStudio打开的工程来重现这个问题呢?这样调查起来会容易些
回复 使用道具 举报
sxyweiren
中级会员   /  发表于:2016-1-13 17:11:00
地板
回复 3楼robert的帖子

应该是可以的。。
首先把光标放在mlsReji里面。然后点击mlsReji2的第二个单元格。
这个时候会触发mlsReji的CellLeave事件。事件里面通过单元格的移动触发了NewCellPositionNeeded事件。
NewCellPositionNeeded里,如果判断当前单元格是mlsReji的话,会执行类似于CancelEdit的动作。

你可以再试试。。如果还不行我这边想法吧Source给上传了。
回复 使用道具 举报
sxyweiren
中级会员   /  发表于:2016-1-14 20:39:00
5#
回复 3楼robert的帖子

我把Form的代码上传了。
你是试试 。。

画面启动后点击绿色单元格。。发现黄色单元格移动。再次点击绿色单元格。。发现绿色单元格的Format没了。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
回复 使用道具 举报
Alice
社区贡献组   /  发表于:2016-1-15 09:45:00
6#
回复 5楼sxyweiren的帖子

谢谢提供的Demo。
您的问题我们收到了,测试后给您反馈。
请点击评分,对我的服务做出评价!  5分为非常满意!

葡萄城控件服务团队

官方网站: http://www.gcpowertools.com.cn
回复 使用道具 举报
robert
金牌服务用户   /  发表于:2016-1-15 10:29:00
7#
多谢你的代码,我觉得可以重现你遇到的问题了。问题的原因好像是MessageBox把消息循环搞乱了。请尝试按以下代码的方式修改,看是否可以解决问题
  1.    
  2.     Private Sub mlsREJI_NewCellPositionNeeded(sender As Object, e As GrapeCity.Win.MultiRow.NewCellPositionNeededEventArgs) Handles mlsREJI.NewCellPositionNeeded
  3.         If e.CellIndex = 1 Then
  4.             BeginInvoke(New System.Action(AddressOf ShowMessage))
  5.             e.NewCellPosition = New GrapeCity.Win.MultiRow.CellPosition(e.RowIndex, e.CellIndex)
  6.         End If
  7.     End Sub

  8.     Private Sub ShowMessage()
  9.         MsgBox("mlsREJI_NewCellPositionNeeded")
  10.     End Sub
复制代码

评分

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

查看全部评分

回复 使用道具 举报
sxyweiren
中级会员   /  发表于:2016-1-26 22:00:00
8#
回复 7楼robert的帖子

谢谢了,最近去了另外一个项目暂时帮忙。所以结果暂时不好验证了。

麻烦先把帖子关掉吧。如果再有问题我在发个新的。
回复 使用道具 举报
Alice
社区贡献组   /  发表于:2016-1-27 09:25:00
9#
回复 8楼sxyweiren的帖子

好的,谢谢您的反馈。
问题暂时关闭,如果有问题,请跟帖。
请点击评分,对我的服务做出评价!  5分为非常满意!

葡萄城控件服务团队

官方网站: http://www.gcpowertools.com.cn
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 立即注册
返回顶部