以文本方式查看主题

-  Foxtable(狐表)  (http://www.foxtable.com/bbs/index.asp)
--  专家坐堂  (http://www.foxtable.com/bbs/list.asp?boardid=2)
----  列切换下拉窗口报错  (http://www.foxtable.com/bbs/dispbbs.asp?boardid=2&id=152773)

--  作者:rjh4078
--  发布时间:2020/7/21 19:19:00
--  列切换下拉窗口报错
Dim t As Table
t=Tables("其他出库单.其他出库明细")
t.Cols("料号").DropForm =Nothing
’e.sender是一个Dropbox控件
If e.sender.Value<>"" Then
    Select Case e.sender.value
        Case "成品出库"
            t.Cols("料号").DropForm ="A"
        Case "其他出库"
            t.Cols("料号").DropForm ="B"
        Case Else
            t.Cols("料号").DropForm =Nothing
    End Select
End If
错误是这样的 如果料号这个列第一次绑定了A窗口 再切到B窗口时就会报错,第一次绑定了B窗口 再切到A窗口时也会报错。如果第一次没有绑定窗口,随便哪个窗口都不报错。
.NET Framework 版本:4.0.30319.42000
Foxtable 版本:2020.3.31.8
错误所在事件:窗口,其他出库单,出库类别,TextChanged
详细错误信息:
索引超出范围。必须为非负值并小于集合大小。
参数名: index
[此贴子已经被作者于2020/7/21 19:20:39编辑过]

--  作者:rjh4078
--  发布时间:2020/7/21 20:04:00
--  
新建了一个项目无法重现这个错误  郁闷
--  作者:rjh4078
--  发布时间:2020/7/21 20:18:00
--  
调用的目标发生了异常。
   在 System.RuntimeMethodHandle.InvokeMethod(Object target, Object[] arguments, Signature sig, Boolean constructor)
   在 System.Reflection.RuntimeMethodInfo.UnsafeInvokeInternal(Object obj, Object[] parameters, Object[] arguments)
   在 System.Reflection.RuntimeMethodInfo.Invoke(Object obj, BindingFlags invokeAttr, Binder binder, Object[] parameters, CultureInfo culture)
   在 Foxtable.o 00o   .ooo.O...(Object A_0, RowColEventArgs A_1, RecordGrid A_2)
索引超出范围。必须为非负值并小于集合大小。
参数名: index
   在 System.ThrowHelper.ThrowArgumentOutOfRangeException(ExceptionArgument argument, ExceptionResource resource)
   在 C1.Util.Win.AmbientPropertyMonitor.a()
   在 C1.Util.Win.AmbientPropertyMonitor.b(Object A_0, EventArgs A_1)
   在 System.EventHandler.Invoke(Object sender, EventArgs e)
   在 System.Windows.Forms.Control.OnParentChanged(EventArgs e)
   在 System.Windows.Forms.ContainerControl.OnParentChanged(EventArgs e)
   在 System.Windows.Forms.Control.AssignParent(Control value)
   在 System.Windows.Forms.Control.ControlCollection.Remove(Control value)
   在 System.Windows.Forms.Form.ControlCollection.Remove(Control value)
   在 System.Windows.Forms.Control.ControlCollection.Clear()
   在 Foxtable.Oo。。。。。。.oO...oo.(String A_0)
   在 Foxtable.Col.set_DropForm(String value)
   在 UserCode.PrepareEdit(RowColEventArgs e)

做了个日志追踪 获取到这些信息


--  作者:rjh4078
--  发布时间:2020/7/21 20:20:00
--  
If e.Col.name="料号" Then
    With Tables("其他出库单")
        If .current IsNot Nothing Then
            Dim r As Row=.current
            If r("出库类别")="成品出库" Then
                e.Col.DropForm ="cpjs"
                
            Else
                e.Col.DropForm ="物料查询"
                \'\'e.Col.DropForm ="发货客户检索"
            End If
        End If
        
        
    End With
    \'
End If

代码位置调整了 

--  作者:rjh4078
--  发布时间:2020/7/22 9:38:00
--  
图片点击可在新窗口打开查看
--  作者:有点蓝
--  发布时间:2020/7/22 9:41:00
--  
还有问题?如果新项目没有问题,一般就是有其它代码或者用法影响了。把项目复制到其它地方,无关的窗口表格全部删除掉测试,一步步排除看是哪里有影响
--  作者:rjh4078
--  发布时间:2020/7/22 10:18:00
--  
还是报同样的错误 我把触发点换了几个事件 或者单独做个按钮来触发 都不行
--  作者:rjh4078
--  发布时间:2020/7/22 10:20:00
--  
If e.Col.name="料号" Then
    With Tables("其他出库单")
        If .current IsNot Nothing Then
            Dim r As Row=.current
            If r("出库类别")="成品出库" Then
                e.Col.DropForm ="cpjs"
                
            Else
                e.Col.DropForm ="物料查询"
                
            End If
        End If
        
        
    End With
    \'
End If
红色部分的代码换成e.Col.DropForm =”“也会报错 只要这个列之前绑定了一个dropform再换其他的就会报错
[此贴子已经被作者于2020/7/22 10:23:03编辑过]

--  作者:有点蓝
--  发布时间:2020/7/22 10:23:00
--  
把项目复制到其它地方,无关的窗口表格全部删除掉测试,一步步排除看是哪里有影响。找不到原因把这个实例发上来
--  作者:rjh4078
--  发布时间:2020/7/22 16:02:00
--  
搞了一天 突然发现把cpjs的窗口名称改了就OK了  导出代码也查了一遍  只有这个地方调用了cpjs 不明白原理