找回密码
 立即注册

QQ登录

只需一步,快速开始

sfchina1977

注册会员

4

主题

22

帖子

124

积分

注册会员

积分
124

活字格认证

最新发帖
sfchina1977
注册会员   /  发表于:2011-8-11 10:49  /   查看:8625  /  回复:7
原来程序在VSNET2003下下使用Spread WInForm 1.0开发的,现在升级到VSNET2008,Spread也升级为5.0。在Grapecity上找到的产品介绍上说5.0是向下兼容的。但是我们现在发现一个很严重的问题,那就是相同操作下触发的事件和1.0的不一致。

特别是EditModePermanent设为True后,出现了很多奇怪的现象。
下面是测试程序。
窗体上有一个Spread和一个按钮。
Spread中B列是设置为Locked=True的。
操作如下
VSNET2003,Spread WinForm 1.0

1、焦点在A列单元格上,鼠标点击B列的单元格,  焦点还是在A列单元格上。
触发事件:
2011/08/06 11:54:37 766-[FpSpread1_GotFocus]-Start

2、焦点在A列单元格上,鼠标点击C列的单元格,  焦点落在C列单元格上。
触发事件:
2011/08/06 11:54:37 766-[FpSpread1_LeaveCell]-Start
2011/08/06 11:54:37 790-[FpSpread1_EnterCell]-Start

VSENT2008,Spread WinForm 5.0

1、焦点在A列单元格上,鼠标点击B列的单元格,  焦点落在按钮上。
触发事件:
2011/08/06 11:56:09 031-[FpSpread1_Leave]-Start
2011/08/06 11:56:09 031-[FpSpread1_Validating]-Start

2、焦点在A列单元格上,鼠标点击C列的单元格,  焦点落在C列单元格上。
触发事件:
2011/08/06 11:56:52 968-[FpSpread1_LeaveCell]-Start
2011/08/06 11:56:52 968-[FpSpread1_GotFocus]-Start
2011/08/06 11:56:52 968-[FpSpread1_Leave]-Start
2011/08/06 11:56:52 968-[FpSpread1_Validating]-Start
2011/08/06 11:56:52 984-[FpSpread1_Enter]-Start
2011/08/06 11:56:52 984-[FpSpread1_GotFocus]-Start
2011/08/06 11:56:52 984-[FpSpread1_EnterCell]-Start

7 个回复

倒序浏览
sfchina1977
注册会员   /  发表于:2011-8-11 10:49:00
沙发

回复 1# sfchina1977 的帖子

测试代码如下
  1. Public Class Form1

  2.     Inherits System.Windows.Forms.Form



  3. #Region " Windows フォーム デザイナで生成されたコード "



  4.     Public Sub New()

  5.         MyBase.New()



  6.         ' この呼び出しは Windows フォーム デザイナで必要です。

  7.         InitializeComponent()



  8.         ' InitializeComponent() 呼び出しの後に初期化を追加します。



  9.     End Sub



  10.     ' Form は、コンポーネント一覧に後処理を実行するために dispose をオーバーライドします。

  11.     Protected Overloads Overrides Sub Dispose(ByVal disposing As Boolean)

  12.         If disposing Then

  13.             If Not (components Is Nothing) Then

  14.                 components.Dispose()

  15.             End If

  16.         End If

  17.         MyBase.Dispose(disposing)

  18.     End Sub



  19.     ' Windows フォーム デザイナで必要です。

  20.     Private components As System.ComponentModel.IContainer



  21.     ' メモ : 以下のプロシージャは、Windows フォームデザイナで必要です。

  22.     'Windows フォーム デザイナを使って変更してください。

  23.     ' コード エディタを使って変更しないでください。

  24.     Friend WithEvents FpSpread1 As FarPoint.Win.Spread.FpSpread

  25.     Friend WithEvents FpSpread1_Sheet1 As FarPoint.Win.Spread.SheetView

  26.     Friend WithEvents Button1 As System.Windows.Forms.Button

  27.     <System.Diagnostics.DebuggerStepThrough()> Private Sub InitializeComponent()

  28.         Me.FpSpread1 = New FarPoint.Win.Spread.FpSpread

  29.         Me.FpSpread1_Sheet1 = New FarPoint.Win.Spread.SheetView

  30.         Me.Button1 = New System.Windows.Forms.Button

  31.         CType(Me.FpSpread1, System.ComponentModel.ISupportInitialize).BeginInit()

  32.         CType(Me.FpSpread1_Sheet1, System.ComponentModel.ISupportInitialize).BeginInit()

  33.         Me.SuspendLayout()

  34.         '

  35.         'FpSpread1

  36.         '

  37.         Me.FpSpread1.Location = New System.Drawing.Point(32, 8)

  38.         Me.FpSpread1.Name = "FpSpread1"

  39.         Me.FpSpread1.Sheets.AddRange(New FarPoint.Win.Spread.SheetView() {Me.FpSpread1_Sheet1})

  40.         Me.FpSpread1.Size = New System.Drawing.Size(480, 104)

  41.         Me.FpSpread1.TabIndex = 0

  42.         '

  43.         'FpSpread1_Sheet1

  44.         '

  45.         Me.FpSpread1_Sheet1.Reset()

  46.         'Formulas and custom names must be loaded with R1C1 reference style

  47.         Me.FpSpread1_Sheet1.ReferenceStyle = FarPoint.Win.Spread.Model.ReferenceStyle.R1C1

  48.         Me.FpSpread1_Sheet1.Columns.Get(1).BackColor = System.Drawing.Color.FromArgb(CType(224, Byte), CType(224, Byte), CType(224, Byte))

  49.         Me.FpSpread1_Sheet1.Columns.Get(1).Locked = True

  50.         Me.FpSpread1_Sheet1.RowHeader.Columns.Default.Resizable = False

  51.         Me.FpSpread1_Sheet1.SheetName = "Sheet1"

  52.         Me.FpSpread1_Sheet1.ReferenceStyle = FarPoint.Win.Spread.Model.ReferenceStyle.A1

  53.         '

  54.         'Button1

  55.         '

  56.         Me.Button1.Location = New System.Drawing.Point(72, 128)

  57.         Me.Button1.Name = "Button1"

  58.         Me.Button1.TabIndex = 1

  59.         Me.Button1.Text = "Button1"

  60.         '

  61.         'Form1

  62.         '

  63.         Me.AutoScaleBaseSize = New System.Drawing.Size(5, 12)

  64.         Me.ClientSize = New System.Drawing.Size(616, 262)

  65.         Me.Controls.Add(Me.Button1)

  66.         Me.Controls.Add(Me.FpSpread1)

  67.         Me.Name = "Form1"

  68.         Me.Text = "Form1"

  69.         CType(Me.FpSpread1, System.ComponentModel.ISupportInitialize).EndInit()

  70.         CType(Me.FpSpread1_Sheet1, System.ComponentModel.ISupportInitialize).EndInit()

  71.         Me.ResumeLayout(False)



  72.     End Sub



  73. #End Region





  74.     Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load

  75.         _DebugWriteLog(System.Reflection.MethodBase.GetCurrentMethod.Name, "Start")

  76.         Me.FpSpread1.EditModePermanent = True

  77.     End Sub



  78.     Private Sub FpSpread1_Enter(ByVal sender As Object, ByVal e As System.EventArgs) Handles FpSpread1.Enter

  79.         _DebugWriteLog(System.Reflection.MethodBase.GetCurrentMethod.Name, "Start")



  80.     End Sub



  81.     Private Sub FpSpread1_EnterCell(ByVal sender As Object, ByVal e As FarPoint.Win.Spread.EnterCellEventArgs) Handles FpSpread1.EnterCell

  82.         _DebugWriteLog(System.Reflection.MethodBase.GetCurrentMethod.Name, "Start")



  83.     End Sub



  84.     Private Sub FpSpread1_GotFocus(ByVal sender As Object, ByVal e As System.EventArgs) Handles FpSpread1.GotFocus

  85.         _DebugWriteLog(System.Reflection.MethodBase.GetCurrentMethod.Name, "Start")

  86.     End Sub



  87.     Private Sub FpSpread1_Leave(ByVal sender As Object, ByVal e As System.EventArgs) Handles FpSpread1.Leave

  88.         _DebugWriteLog(System.Reflection.MethodBase.GetCurrentMethod.Name, "Start")



  89.     End Sub



  90.     Private Sub FpSpread1_LeaveCell(ByVal sender As Object, ByVal e As FarPoint.Win.Spread.LeaveCellEventArgs) Handles FpSpread1.LeaveCell

  91.         _DebugWriteLog(System.Reflection.MethodBase.GetCurrentMethod.Name, "Start")



  92.     End Sub



  93.     Private Sub FpSpread1_Validating(ByVal sender As Object, ByVal e As System.ComponentModel.CancelEventArgs) Handles FpSpread1.Validating

  94.         _DebugWriteLog(System.Reflection.MethodBase.GetCurrentMethod.Name, "Start")



  95.     End Sub



  96.     Private Sub _DebugWriteLog(ByVal methodName As String, ByVal logContent As String)

  97.         Dim logTime As String = Now.ToString("yyyy/MM/dd HHss fff")

  98.         Dim logMessage As String = String.Format("{0}-[{1}]-{2}", logTime, methodName, logContent)

  99.       System.Console.WriteLine(logMessage)

  100.     End Sub

  101. End Class
复制代码
回复 使用道具 举报
sfchina1977
注册会员   /  发表于:2011-8-11 10:50:00
板凳

回复 1# sfchina1977 的帖子

这个事件触发机制让我们很受伤,而且也没有道理。
因为很多的验证是在Validating去做的。
点击Locked=True的列焦点直接就出Spread了。

请教我们该怎么去修改代码,让程序返回到原来的事件处理流程?
通过Spread的什么设置可以实现,或者是外部代码实现?
回复 使用道具 举报
sfchina1977
注册会员   /  发表于:2011-8-11 10:50:00
地板

回复 1# sfchina1977 的帖子

而且严重的是当点击C列焦点依旧在Spread内部时,Leave和Validating事件就会被触发。这个绝对没有道理呀!
回复 使用道具 举报
ZenosZeng讲师达人认证 悬赏达人认证
超级版主   /  发表于:2011-8-11 17:58:00
5#

回复 4# sfchina1977 的帖子

你好,我在Spread 5 WinForm英文版中的试验结果如下:
1、英文版中没有GetForus事件
2、点击Locked = True的单元格不触发任何事件
3、焦点在A1上,点击C1时触发以下两个事件
2011/08/11 1702 113-[FpSpread1_LeaveCell]-Start
2011/08/11 1702 164-[FpSpread1_EnterCell]-Start
回复 使用道具 举报
sfchina1977
注册会员   /  发表于:2011-8-11 18:34:00
6#
难道是日语版的问题??
我去看看具体的版本,郁闷呀:(
回复 使用道具 举报
sfchina1977
注册会员   /  发表于:2011-8-11 18:41:00
7#
我用的版本是

SPREAD for Windows Forms 5.0J
Version : 5.0.2007.2008(ServicePack 1)

请帮帮忙!!!看看是什么问题,如何解决!!
谢谢了!!
回复 使用道具 举报
sfchina1977
注册会员   /  发表于:2011-8-11 18:42:00
8#
我在VS2008下做的开发
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 立即注册
返回顶部