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。 回复 1楼qiuzhilv007的帖子
谢谢您的反馈。
如果要将RowCount设置为0,前提是AllowUserToAddRows属性设置为false。
在RowCount设置为0后,CurrentCellPosition会是Empty,CurrentCellPosition的Row和Column都是-1.
再重新设置RowCount后,无论之前的焦点在哪里,因为会重新绘制和选中单元格,所以总是会触发CellEnter事件。
因此我不能重现您说的触发不了CellEnter事件。所以请提供能必然重现该问题的步骤。
另外有关CurrentCellPosition属性的策略,如果因为删除或是修改行导致该CurrentCellPosition的位置不存在,就会跳到上一行的同一位置,如果为0的时候,就是Empty。重新设置行后,会进入第一行的上次点击的位置。 对不起,对于重新设置rowcount后,不触发cellenter事件是失误。不触发是自己控制的。
因sheet4.0中enter事件发生时cellenter是不触发的,所以控制住了。但sheet4.0中,当行被清了后,再设置行显示时焦点是不会被记忆的,是放在(0,0)上的。
这时在代码中再把焦点设置到其他单元格上,会触发设置焦点单元格的cellenter。但multirow记忆了。导致设置焦点相当于还是原来的位置。 回复 3楼qiuzhilv007的帖子
不好意思,我没理解您想在MR8.0中实现什么样的功能? 想实现在rowcount设置为0时焦点自动清除记忆。再为rowcount设置大于0的值时,焦点自动到(0,0)坐标。
也就是清除行时别让Multirow还记着清行之前焦点在哪。
一般用户操作检索时,当检索出数据时焦点在左上角单元格。用户进行操作后焦点不一定在哪个单元格上。
当清除检索结果再检索出数据时还应该在左上角。可Multirow竟然记住上次的焦点。这不合常理。
我可以在清除数据前,或数据出来后手动将焦点放在(0,0)上,可这个操作导致单元格焦点变换而引发了cellenter事件。
想要的功能是如何在清除行时,把multirow记住焦点这个多余的东西清掉。 回复 5楼qiuzhilv007的帖子
您好。
经过和研发组确认,触发CellEnter是设计,无法改变。 回复 6楼Alice的帖子
额,主要问题是清行后为何焦点还记忆。并不是触发cellenter这个 我尝试设置行数为0再设置成大于0的行数,没有触发焦点记忆。
是否可以上传一个简单的工程来重现你说的现象呢?
谢谢
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 非常抱歉,我确认了下。MultiRow8的策略确实是记录了删除行前选择的CellIndex。而且没有好的方案去规避这个策略。
页:
[1]