主题:查找程序bug
地址:http://www.winfarsoft.com/winfar_richcelldll.rar
给分:找到bug都每人至少50分,多的100分,立即开贴给分!
信誉:请看http://community.csdn.net/Expert/topic/3942/3942197.xml?temp=.4402582和http://community.csdn.net/Expert/topic/3942/3942197.xml?temp=.7157709!
其它:特别欢迎使用繁体中文和英文版操作系统的朋友进行测试!最好将winfar_richcell.dll控件加入到自己的程序中进行测试,用我自己开发的测试程序可能难于发现bug了。
最后:Up者同样有分!

解决方案 »

  1.   

    新建一个文档,文档只有一个表页,设置该表页的"表页口令"之后,保存生成一个WFR文档.
    重启应用程序,打开该文档,提示输入口令时,输入不正确的口令或点击"取消"三次以后,文档却被显示出来,这是错误的.
      

  2.   

    你在文档中写到"Winfar_DataBook1.About = "Copyright (C) LiangZhongQi",其实About是DataBook1的一个方法才对.
      

  3.   

    1.在英文环境中,关于对话框中的一,二,三条注意事项都是中文,这是错误的.
    2.Winfar_DataBook1.AutoDrawFlag = False
       For I = 0 To Winfar_DataBook1.DataPage.Sheet.Rows - 1
          For J = 0 To Winfar_DataBook1.DataPage.Sheet.Cols - 1
             Winfar_DataBook1.DataPage.Sheet.Text(I, J) = (I + 1) * (J + 1)
          Next J
       Next I
       Winfar_DataBook1.AutoDrawFlag = True
       调用上面的代码后,如果不调用Winfar_DataBook1的其它方法则表格中的数据不会被刷新,应该在AutoDrawFlag变为true的时候由控件自动调用Refresh方法,不应该由用户调用.
    3.在AutoDrawFlag为false的时候对控件进行修改列宽,松开鼠标后没有进行刷新,这是正确的,但进行第二次修改列宽的时候,第一次的修改就会被看到,这是不应该的,应该在用户调用Refresh方法时才刷新.
      

  4.   

    1、我有Windows2000 + VS.NET 2003中,自定义工具箱时,选择Winfar_Richcell.dll提示“反序列化对象的状态不足。需要详细信息。”,不能添加到工具箱中,没办法使用,不知道其他人提过这个问题没有。
    ==>因为控件加了混淆,所以不能直接从控件箱中加载控件,不过可以这样:在资源管理器的引用中加载Winfar_Richcell.Dll控件,然后将下面的代码复制到窗体的Load事件中就可以了
          Dim Book1 As New Winfarsoft.Richcell.Winfar_DataBook
          Me.Controls.Add(Book1)
          Book1.Dock = DockStyle.Fill
          Book1.Show()2、以前用你自己提供的Winfar_Report.exe测试,从Access数据库中生成表页时,有时候会出现固定行和其它单元格的列宽不一致的情况(错位)。
    ==>确实是Bug,已解决之!3、功能的确强大,如果美观上多几种风格就更完美了。还有,大数据的处理优化了吗???会不会刚Execl一样,有大数据的BUG?我在使用EXECL的时候,我本来有几万条数据,EXECL给我的结果被是我实际数据的二倍
    ==>没有大数据的Bug,但数据量大了以后保存文件会很大,打开文件时可能会受点影响
     
       
    4、速度有点慢。不知道是怎么回事。拖动时有显示的延滞感。机器配置:ibm t22/win2003/256M内存/vs.2003+sqlserver+office2003
    ==>我的机器配制为:Dell8600(P4 1.6,512),运行很流畅!
       
    5、一个关于刷新的问题.在拖动一行的下边缘修改行高时,如果在该行的上边线上或上边线之上放下,则虚线没有消失.同样,在更改列宽时也是同样的问题。
    ==>确实是Bug,已解决之!6、点击一个单元格后,将鼠标放在该单元格上方,按下Shift并双击该单击格,此时该行的第一列中的单元格得到输入焦点,但此时单击其它行时,其它行无法被选中,只有按下Esc之后才能解除这种情况.
    ==>因为按下Shift健后,选择单元时会整行选择,此时输入焦点单元为所选单元的第一行第一列单元。7、在Book有多页的时候,假如当前选中第一页(第一行,第一列),并将滚动条下拉到一定位置(看不到选中的单元格),此时点击第二页,滚动条并没有还原到正确位置.
    ==>确实是Bug,已解决之!8、应该允许从右向左,或从下向上地选择单元格,这在Excel中是允许的.
    ==>当前版本不允许,如果要增加这个功能,要改动的地方太多,暂时没有修改计划9、单击一个单元格后,在另一个单元格上右击,但另一个单元格并没有被选中,这是不合理的.右击时应该先选中鼠标下面的单元格,之后再弹出相应的快捷菜单.
    ==>当前版本不允许,如果要增加这个功能,要改动的地方太多,暂时没有修改计划10、在页面中加入了标签,并将其选中后,右击它不应该弹出右击菜单,且此时单元格中不应该存在当前选中的单元格.
    ==>不是Bug,但确实有点不合理,还没解决!   
    11、当一列被合并单元格后,仍然能够向该列中的任意单击格中输入内容,而且输入完内容后,该单元格就被为独立的单元格了.
    ==>合并列是同一列中相邻单元如果单元文本相同则自动合并,如果单元文本不相同则当然会自动分割了! 
    12、在用格式刷复制格式的时候没有把单元格的对齐方式复制过来.
    ==>因为当新建一个文档时,所有单元默认的对齐方式是数字、日期型向右对齐,字符向左对齐,你在用格式刷时源单元和目标单元对齐格式都是默认对齐方式,当源单元为数字或日期时其对齐方式是向右对齐,而目标单元可能是字符,所以就是用了格式刷好象没有什么变化。
     
    13、在单元格中默认对齐方式是文字左对齐,数字右对齐,但当输入为111ttt时,却被认为是数字.
    ==>要判断单元文本是数字还是字符,用IsNumeric函数据进行判断时,如果单元文本不是数字时运行效率非常低,所以我只判断了第一个字符!
     
    14、在复制标签对象后,粘贴,但是填充设置并没有被复制过来.
    ==>确实是Bug,已解决之!15、在页面风格模式中,输入框与单元格无法对齐
    ==>确实是Bug,已解决之!16、在页面风格模式下,无法将标签拖到与第一行单元格平齐.
    ==>页面模式下,第一行是表头栏,它和细节栏不是同一个对象了,所有不可能对齐。17、同时选中两个单元格,其中一个是左对齐,一个是右对齐,在设置它们的竖直对齐方式时,右边的单元格的水平对齐方式变为左边单元格的水平对齐方式了.
    ==>所有的功能都针对全部被选取的单元的。18、导出到xls出错
    ==>目前还没有导出Excel文件的功能,因为这涉及到Excel文件格式的问题,而我对Excel文件格式还不太熟。19、打开你的系统--->打开数据库access数据库..(2000的)--->里面有一些表,选择汇总向导---->交叉表汇总.-->选择一个被分组字段(其中一个表的字段(时间日期型))--->选择后按下一步--->被选择日期字段(也是刚才那个字段(时间日期型))--->下一步--->再按一步,就会出错..
    ==>我试了多次,一次没有发现这个问题,不知道是不是数据库字段类型的问题?20、当程序打开一个被损坏的文件后,会显示"文件格式不正确或文件已经损坏",之后,第一列的标题会被选中,这是不正确的.不应该修改当前选中的单元格.
    ==>确实是Bug,已解决之!
      

  5.   

    21、新建一个文档,在第一行最后一列的单元格中输入一些文字,并选中该单元格后,单击"固定单元"后,按下鼠标右键,则产生异常(System.ArgumentException: “13”不是“value”的有效值。“value”应介于 'minimum' 和 'maximum' 之间)
    ==>确实是Bug,已解决之!
     
    22、在一个单元格中输入数据之后,选中该单元格,并选择"单元文本只读"后,仍然可以用右击菜单,或键盘方式进行修改文本(Ctrl+V,Del都可用).
    ==>确实是Bug,已解决之!23、新建一个文档,转换到页面风格,对页面中的第一行单元格进行设置后,回到混合风格模式,则第一行的文本变成了表格中的列标题(这可能是对的),但是上面的上卡片的标题并没有改变,这是一个BUG.
    ==>不是Bug,但不合理,已解决之!
     
    24、新建一个文档,转换到页面风格格式后,将垂直滚动条拉到最下方,并选中最后一行的某一个单元格,按下键盘方向"DOWN"后,会显示第二页的内容,但是垂直滚动条没有回到最上面,因此无法看到第一行的单元格,这是错误的,应该把垂直滚动条置于最上方.
    ==>不是Bug,但不合理,还没有解决25、新建一个文档,设置为"页面风格格式"后,第一行的前四个单元格为"t1","t2","t3","t4",之后回到"表格模式",此时前四列的标题为"t1","t2","t3","t4",后面则是"E","F","G",...到最后"O",选中第一列,单击"删除表列"后,剩下的列为"t2","t3","t4","D","E",..."N",选择"撤销操作"后,得到的列标题为"A","t2","t3","t4","E","F","G",...."O",第一列不应该是"A",应该是"t1".
    ==>不是Bug,但不合理,已解决之!26、新建一个文档,在某一个单元格中输入一些XML的非法文本(如",;:<>?&%")后,另存为XML文件,下次打开的时候会提示"文件格式不正确或文件已损坏",这是错误的.在保存文件的时候就应该判断是否有XML文件中不允许的字符出现.
    ==>我没有发现这个现象  
     
    27、为文档设置的密码在生成的文件中过于明显,在WFR文件的第二行以明文显示,在XML文件中则以<password>存储明文,至少应该加密明文,或者以其Hashcode码存于隐蔽的地方,我认为这很重要.
    ==>还没解决
     
    28、关于口令方面的,当设置一个文档的口令为空时,并不表示用户要取消这个密码保护,因为口令设置并没有提示:设置为空则取消密码保护.当打开一个密码为空的文档时,还是应该提示输入密码.
    ==>我认为如果设置为空就意味着取消口令,因为空口令没有任何意义呀!
     
    29、弹出的输入密码及消息对话框不是处于应用程序最前方的,而是处于系统最前方,当其它应用程序处于成为当前应用程序时,该对话框会覆盖其它的应用程序.
    ==>已解决
     
    30、在一个单元格中输入100000000000000000000000000000000000000000000000000000000000000000后,选中该单元格,并选择中文式金额,则显示为"壹万",明显是错误的.
    ==>已解决,解决的方法就是判断数字是否大于某个数,如果大于则返回“Error”31、在单元格中输入100000后,点击"千分符数字"后,显示的结果为"100,000.00",这是不对的,因为原始数据是整数,而现在却变为了实数表现形式,万一该字段表示为"人数",则是不合适的.
    ==>这个应该不是问题,如果是我的话只对某些必要的单元设置等分数字32、在一个单元格中输入一个数字比如"1000",选中该单元格后,选中"英文式金额",或选中"百分符数字"或选中"千分位数字"后,连续点击"减少小数位",则当小数位的个数小于0时会使显示出现异常情况.
    ==>已解决
     
    33、在生成的XML文件中应该有DTD设置,这样如果用户手工修改过后文件可以先通过XMLValidatingReader进行正规性检查,和和效性检查,之后再进行你自己的数据格式的合法性验证.
    ==>好主意,但还没实现34、不知你是否允许用户输入中文的密码,不过我向密码输入窗口中输入中文也正确,如果是这样,密码输入窗口应该允许切换到中文输入法模式,但是我一直无法切换到中文模式.如果不允许出现中文密码,则在用户输入时应该进行提示.
    ==>没解决35、新建一个文档,输入几行几列的数据后,另存为一个XML格式的文件.之后新建一个文档,导入这个XML文件后,没有提示错误,却把错误的数据都导了进来,这是不对的,应该选判断这个文件是否可以导入,之后再进行导入操作.
    ==>不太好判断,因为有可能是其它程序生成的XML格式文件。36、对标签对象的任何操作,都无法进行"撤销操作".
    ==>是的,对对象的操作目前还没有撤销功能37、当同时选择多个标签对象时,进行"大小相同","高度相同","宽度相同"等操作时,会以第一个被选中的标签为基准,最好从外观上能看出以哪个对象为基准.
    ==>多用几次就好了
     
    38、打开数据库一个表之后,在"数据库"->"编辑"->"删除记录"之后,选择"回滚记录"后表格没有立即刷新.
    ==>该功能已被取消
     
    39、如果数据库有帐号,密码设置,则也会在生成的文档中以明文的方式看到,这是不应该的.
    ==>是,有道理,可能目前在加密方面的知识还很贫乏40、新建一个文档,在一个单元格中输入含有空格的字符串,并且导出文件时选择以空格分隔,那么下一次导入后,数据则会被放入到两个单元格中.
    ==>是的,没有办法解决。
      

  6.   

    你回答的第17点,它应该是一个BUG,因为同时选择两个单元格,只修改它们的垂直对齐属性的时候,不应该影响它们的水平对齐属性.
      

  7.   

    第11点仍然是一个BUG,我是用下面的方法试验的.
    新建一个文档,选中某个单元格后,单击工具按鈕”合并列”,或菜单中的”DataPage”->”DataColumn”->”Merge”时产生的效果不对.
      

  8.   

    1.新建一个文档,选中一个文本内容为空的单元格,按下键盘上的"BackSpace"键后,可以看到输入文本框中有内容,应该是空的.
    2.在英文系统中,在退出系统显示”Are you sure want to quit?”应该为”Are you sure to quit?”
    3.在设置密码时显示信息为”Setting password of the Page”,我认为是”Set the password for the Page”或”Set the password of the Page”,同理其它的显示信息为”Setting …”.
    4.在英文系统中,关于对话框中的应该是”Programmed By …”
    5.若当前系统为英文系统,在一个单元格中输入200,并单击”金”则显示没有改变.
    6.在英文系统中,“金”后面的那个按钮的提示不应该是”AmericaMoney”,因为它表示当前系统的货币表示方法,并不只针对美国.
      

  9.   

    在英文系统中,查找与替换对话框中的"左边匹配","右边匹配",可能由于控件大小不够变为了"Match L","Match R","全部替换"变为了"Replace A".
      

  10.   

    生成一个WFR文件,将其扩展名改为xml后,在应用程序中打开,会提示错误,我认为最好能够根据文档的内容或一些关键信息来判断文档是否有效.
      

  11.   

    zglxh3(noproblem) 接分呀!http://community.csdn.net/Expert/topic/3981/3981560.xml?temp=.1971399
      

  12.   

    有人说zglxh3(noproblem) 和dbspro(冷锋) 是一个人,那么下面的这些人都是dbspro(冷锋)吗?
    1、http://community.csdn.net/Expert/topic/3976/3976961.xml?temp=.8308527
    2、http://community.csdn.net/Expert/topic/3964/3964529.xml?temp=.6136286
    3、http://community.csdn.net/Expert/topic/3943/3943060.xml?temp=.9568903
    4、http://community.csdn.net/Expert/topic/3948/3948843.xml?temp=.7892267
    5、http://community.csdn.net/Expert/topic/3979/3979405.xml?temp=.1194269
    6、http://community.csdn.net/Expert/topic/3976/3976758.xml?temp=.3790705别人给我解决了问题,我就给他分,这有什么不对呢?
      

  13.   

    老兄,能不能把修改完BUG的最新程序放上来,我想用新代码来测试!
      

  14.   

    新建一个文档后,选中第一行,第一列的单元格,将垂直滚动条拉到可以看到最后一行的地方(能看到第50行),此时按下PageDown后,可以看到,当前选中的单地名格变为第50行的单元格,这是不对的,PageDown应该是当前单元格+一页中的行数,而不是变为当前页面中可以看到的最后一行.
      

  15.   

    zglxh3(noproblem) :下面的程序是什么功能?我看不明白.
    static void Main() 
    {
        System.Threading.Thread.CurrentThread.CurrentCulture = new System.Globalization.CultureInfo("en-US");
        System.Threading.Thread.CurrentThread.CurrentUICulture = new System.Globalization.CultureInfo("en-US");
        Application.Run(new Form1());
    }
      

  16.   

    System.Threading.Thread.CurrentThread.CurrentCulture = new System.Globalization.CultureInfo("en-US");
        System.Threading.Thread.CurrentThread.CurrentUICulture = new System.Globalization.CultureInfo("en-US");
    表示将当前线程的区域设置改为指定的区域,这样Winfar_DataBook对象创建时会认为当前系统是英文系统,就会显示"英文信息".
    对了,在英文环境中,你程序的"关于"对话框的标题还是中文,应该为"About".
      

  17.   

    选中1A到D8所有单元格后"合并单元格",选"工作表"->"单元"->"设置图像",选择一个大一点儿的图片,并选择以"图像伸缩"的方式,"确定"之后,将这个单元格与右边的1E到8E的单元格进行合并,可以看到1A到8E的单元合并成一个单元格,并且图片填充在其中,此时"撤销操作"后,错误就显而易见了.
      

  18.   

    to dbspro(冷锋):不好意思,我刚看到你发的短消息,我的Mail是 [email protected].
      

  19.   

    新建一个文档,在页面风格格式下,选中第一行的单元格,并按下"PageDn"键,没有反应,点击任意一个单元格后会跳到第二页上,并且第二页上没有任何单元格被选中.
      

  20.   

    "数据库"->"打开"->"打开数据库"后,展开左边的"数据库表"后,双击某一个表链接后,鼠标会被自动定位到另一个位置.
      

  21.   

    1.在设置行高或列宽时,如果指定过大的值"1000000000000000000000000000000"则产生的异常并没有被捕获.同理设置列宽的时候也是同样的错误.
    2.新建一个文档,单击工具栏按钮"删除行"数次,直到只有15行,但是此时垂直滚动条的MaxValue仍然是50,并不是现有的行数.
      

  22.   

    upupuppupppuuuuuuuuuuuuuuuuuppppppppppppppppppppppp
      

  23.   

    to zglxh3(noproblem):真的是人如其名呀,no problem就是没问题,没错误!
    我自认为没错误的地方居然也被找出这么多来,真是佩服!
      

  24.   

    to zglxh3(noproblem):http://community.csdn.net/Expert/topic/3984/3984014.xml?temp=.9132959接分呀!
      

  25.   

    在单元正常对齐格式下必须判断单元字符型是数字型、日期型、还是字符型,我本来担心如果写个函数来判断会极大地影响程序的运行效率,因为一页报表中有许多的单元。但zglxh3(noproblem)兄弟多次指出了这个问题,那我就不得不重新考虑写两个函数了,下面是两个判断数字和日期的函数,写得比较匆忙,可能有考虑不周的地方,哪位路过此地的朋友,请帮忙完善完善!呵,对了,我是用VB写的。   Private Function IsNumeric(ByVal NumericString As String) As Boolean
          Dim I As Integer
          Dim S_HaveDotFlag As Boolean
          Dim S_HaveMinusFlag As Boolean
          Dim S_Length As Integer
          NumericString = NumericString.Trim
          S_Length = NumericString.Length
          For I = 0 To S_Length - 1
             Select Case NumericString.Substring(I, 1)
                Case "0", "1", "2", "3", "4", "5", "6", "7", "8", "9"
                   Exit Select
                Case "."
                   If S_HaveDotFlag = True Then
                      Return False
                   End If
                   S_HaveDotFlag = True
                Case "-"
                   If I <> 0 Then
                      Return False
                   End If
                   If S_HaveMinusFlag = True Then
                      Return False
                   End If
                   S_HaveMinusFlag = True
                Case Else
                   Return False
             End Select
          Next
          Return True
       End Function
       Private Function IsDate(ByVal DateString As String) As Boolean
          Dim I As Integer
          Dim S_Year As Integer
          Dim S_Month As Integer
          Dim S_Day As Integer
          Dim S_Length As Integer
          Dim S_Numeric() As String
          DateString = DateString.Trim
          S_Length = DateString.Length
          If S_Length > 18 Then
             Return False
          End If
          For I = 0 To S_Length - 1
             Select Case DateString.Substring(I, 1)
                Case "0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "-"
                   Exit Select
                Case Else
                   Return False
             End Select
          Next
          S_Numeric = DateString.Split("-")
          If S_Numeric.GetUpperBound(0) <> 2 Then
             Return False
          End If
          '
          S_Year = Val(S_Numeric(0))
          If S_Year < 1900 OrElse S_Year > 2999 Then
             Return False
          End If
          '
          S_Month = Val(S_Numeric(1))
          If S_Month < 1 OrElse S_Month > 12 Then
             Return False
          End If
          '
          S_Day = Val(S_Numeric(2))
          If S_Day < 0 Then
             Return False
          End If
          Select Case S_Month
             Case 1, 3, 5, 7, 8, 10, 12
                If S_Day > 31 Then
                   Return False
                End If
             Case 2
                If S_Day > 26 Then
                   Return False
                End If
             Case 4, 6, 9, 11
                If S_Day > 30 Then
                   Return False
                End If
          End Select
          Return True
       End Function
      

  26.   

    1.在允许用户输入数字的地方,虽然你不允许用户输入字母,数字的长度也限制了,但是将这些值设置为999999时,程序没有任何变化,也没有错误提示.
    2.接上面的问题,请在记事本输入"999999999999999999999999"后复制字符串到剪贴板,并且粘贴(右击文本框选"粘贴",而不是用Ctrl+V)则字符串仍然能够输入到程序中,这是错误的.
      

  27.   

    1.选中所有行后,"隐藏表行",选中所有列后"隐藏表列",可以看到,垂直和水平滚动条的最大值还是原来的值.
    2.选择"预览报表"后显示出"打印报表"窗口,点击第五个工具栏按钮后显示的对话框也允许输入"999999999999999999999",没有任何限制.
    3.选择"预览报表"后显示出"打印报表"窗口,该窗口中的工具栏按钮都没有Tooltip提示信息.
    4.新建一个文档后,Ctrl+A选择所有的单元格,选择"隐藏表列","隐藏表行",此时所有单元格都被隐藏,此时垂直,水平滚动条都没有消失(这是错误的)."追加表行"加一行,"追加表列"加一列后,垂直,水平滚动条都消失了(这是对的),此时连续"ctrl+Z"后所有行和列都显示回来,滚动条没有显示(这是错误的).
      

  28.   

    zglxh3(noproblem)接分http://community.csdn.net/Expert/topic/3986/3986467.xml?temp=.6439478
      

  29.   

    先选中第一行,"设置"->"表行属性","属性类型"选择"表行背景",底纹填充方式,"确定"后,第一行的底纹方式变为指定的样式.之后用Ctrl+A选择所有的单元格后,复制上面的操作,但是除了第一行外的其它的行都没有改变.
      

  30.   

    插入一个标签对象,"对象"->"复制对象"->"粘贴对象"后,将两个标签对象的一部分重合想来,选择位于下方的对象,选择"对象"->"置于顶层",此时,选择标记却是在另一个对象上.
      

  31.   

    to: dbspro(冷锋) 
      老兄,我现找问题也不容易了,请包涵.