qiuzhilv007 发表于 2015-12-17 15:54:00

CurrentCellPosition被记忆

设定rowcount,未设定datasource的Multirow
当rowcount>0时点击一个(0,0)以外的单元格,然后把rowcount设为0清空Multirow
然后再设rowcount值为大于0的值,则CurrentCellPosition被记忆为上次点击的单元格。
为何清空了Multirow获得焦点的单元格还被记忆了?哪里记忆的
清空了再加上行不应该是(0,0)获得焦点吗。这个记忆多此一举,带来的麻烦是本该在设定其他焦点时触发cellenter事件,但被记忆了,设的焦点是被记忆的,触发不了cellenter了
如在清行之前设焦点为(0,0)则多触发了cellenter
如在清行之后设定cellposition.empty则设了也白设
如在加行后设定(0,0)则也是多触发了cellenter。

Alice 发表于 2015-12-17 17:23:00

回复 1楼qiuzhilv007的帖子

谢谢您的反馈。
如果要将RowCount设置为0,前提是AllowUserToAddRows属性设置为false。
在RowCount设置为0后,CurrentCellPosition会是Empty,CurrentCellPosition的Row和Column都是-1.
再重新设置RowCount后,无论之前的焦点在哪里,因为会重新绘制和选中单元格,所以总是会触发CellEnter事件。

因此我不能重现您说的触发不了CellEnter事件。所以请提供能必然重现该问题的步骤。

另外有关CurrentCellPosition属性的策略,如果因为删除或是修改行导致该CurrentCellPosition的位置不存在,就会跳到上一行的同一位置,如果为0的时候,就是Empty。重新设置行后,会进入第一行的上次点击的位置。

qiuzhilv007 发表于 2015-12-17 18:13:00

对不起,对于重新设置rowcount后,不触发cellenter事件是失误。不触发是自己控制的。
因sheet4.0中enter事件发生时cellenter是不触发的,所以控制住了。但sheet4.0中,当行被清了后,再设置行显示时焦点是不会被记忆的,是放在(0,0)上的。
这时在代码中再把焦点设置到其他单元格上,会触发设置焦点单元格的cellenter。但multirow记忆了。导致设置焦点相当于还是原来的位置。

Alice 发表于 2015-12-18 11:43:00

回复 3楼qiuzhilv007的帖子

不好意思,我没理解您想在MR8.0中实现什么样的功能?

qiuzhilv007 发表于 2015-12-18 14:45:00

想实现在rowcount设置为0时焦点自动清除记忆。再为rowcount设置大于0的值时,焦点自动到(0,0)坐标。
也就是清除行时别让Multirow还记着清行之前焦点在哪。
一般用户操作检索时,当检索出数据时焦点在左上角单元格。用户进行操作后焦点不一定在哪个单元格上。
当清除检索结果再检索出数据时还应该在左上角。可Multirow竟然记住上次的焦点。这不合常理。
我可以在清除数据前,或数据出来后手动将焦点放在(0,0)上,可这个操作导致单元格焦点变换而引发了cellenter事件。
想要的功能是如何在清除行时,把multirow记住焦点这个多余的东西清掉。

Alice 发表于 2015-12-18 17:21:00

回复 5楼qiuzhilv007的帖子

您好。
经过和研发组确认,触发CellEnter是设计,无法改变。

qiuzhilv007 发表于 2015-12-18 17:52:00

回复 6楼Alice的帖子

额,主要问题是清行后为何焦点还记忆。并不是触发cellenter这个

robert 发表于 2015-12-21 09:24:00

我尝试设置行数为0再设置成大于0的行数,没有触发焦点记忆。
是否可以上传一个简单的工程来重现你说的现象呢?
谢谢

qiuzhilv007 发表于 2015-12-21 11:10:00


Imports GrapeCity.Win.MultiRow
Public Class Form1

    Private GcMultiRow1 As GcMultiRow
    Private Sub Form1_Load(sender As Object, e As EventArgs) Handles Me.Load

      Dim lbl As Label = New Label
      lbl.Text = "Step1:Set Postion. Step2:ClearRow. Step3:AddRow"
      lbl.Width = 300
      Me.Controls.Add(lbl)

      Dim btnStep1 As Button = New Button
      btnStep1.Text = "Step1"
      btnStep1.Location = New Point(0, lbl.Height)
      AddHandler btnStep1.Click, AddressOf btnStep1_Click
      Me.Controls.Add(btnStep1)

      Dim btnStep2 As Button = New Button
      btnStep2.Text = "Step2"
      btnStep2.Location = New Point(btnStep1.Width, btnStep1.Location.Y)
      AddHandler btnStep2.Click, AddressOf btnStep2_Click
      Me.Controls.Add(btnStep2)

      Dim btnStep3 As Button = New Button
      btnStep3.Text = "Step3"
      btnStep3.Location = New Point(btnStep1.Width + btnStep2.Width, btnStep1.Location.Y)
      AddHandler btnStep3.Click, AddressOf btnStep3_Click
      Me.Controls.Add(btnStep3)

      GcMultiRow1 = New GcMultiRow
      Me.GcMultiRow1.AllowUserToAddRows = False
      Me.GcMultiRow1.AllowUserToDeleteRows = False
      Me.GcMultiRow1.Location = New Point(0, lbl.Height + btnStep1.Height)

      Dim tmpl As Template = New Template
      Dim cell1 As InputMan.GcTextBoxCell = New InputMan.GcTextBoxCell
      Dim cell2 As InputMan.GcTextBoxCell = New InputMan.GcTextBoxCell
      cell2.Location = New Point(cell1.Width, 0)

      tmpl.Row.Cells.Add(cell1)
      tmpl.Row.Cells.Add(cell2)
      tmpl.Row.Height = cell1.Height
      tmpl.Width = cell1.Width * 2

      GcMultiRow1.Template = tmpl
      GcMultiRow1.RowCount = 3
      Me.Controls.Add(GcMultiRow1)

      GcMultiRow1.CurrentCell.Value = "InitCellPosition"

    End Sub
    Private Sub btnStep1_Click()
      If GcMultiRow1.RowCount > 1 Then
            GcMultiRow1.CurrentCellPosition = New CellPosition(1, 1)
            GcMultiRow1.CurrentCell.Value = "Step1CellPosition"
      End If
    End Sub
    Private Sub btnStep2_Click()
      GcMultiRow1.RowCount = 0
    End Sub
    Private Sub btnStep3_Click()
      GcMultiRow1.RowCount = 3
      GcMultiRow1.CurrentCell.Value = "Step3CellPosition"
    End Sub
   
End Class

画面初始焦点在0,0
step1设置焦点为1,1
step2清行
step3再加行
加行后焦点记住了step2设置的列位置,不是初始时的0,0

robert 发表于 2015-12-21 14:14:00

非常抱歉,我确认了下。MultiRow8的策略确实是记录了删除行前选择的CellIndex。而且没有好的方案去规避这个策略。
页: [1]
查看完整版本: CurrentCellPosition被记忆