以文本方式查看主题

-  Foxtable(狐表)  (http://foxtable.net/bbs/index.asp)
--  专家坐堂  (http://foxtable.net/bbs/list.asp?boardid=2)
----  [分享]分享自己做的一个自定义循环查找窗口,菜鸟使用高手跳过  (http://foxtable.net/bbs/dispbbs.asp?boardid=2&id=136678)

--  作者:爱好所有
--  发布时间:2019/6/18 23:04:00
--  [分享]分享自己做的一个自定义循环查找窗口,菜鸟使用高手跳过
一直不喜欢官方自己带的查找功能太弱了,刚开始学,自己做了一个循环查找功能
1、先建两个全局变量col和row
2、再建一个窗口,一个textbox控件和一个按钮控件。在按钮控件里加复制以下代码。
Dim textfind As WinForm.TextBox = e.Form.Controls("TextBox1")
Dim y As Integer = CurrentTable.TopPosition
Dim x As Integer = CurrentTable.BottomPosition
If y <> x Then           \'只让选择一个焦点单元格,方便定位
    MessageBox.Show("请只选一个单元格")
    Return
End If
If Vars("col") <> 0 And Vars("row") <> 0 Then  \'如果全局变量col和row都不为0时赋值所定位的单元格的坐标
    Vars("col") = CurrentTable.ColSel
    Vars("row") = CurrentTable.RowSel
End If
If Vars("col") = CurrentTable.Cols.Count -1 Then \'如果定位的单元格列的坐标是最后一列则赋值全局变量col和row
    Vars("col") = -1
    Vars("row") = Vars("row") +1
End If
If textfind.Text <> Nothing Then   \'控件textBox1不为空时执行
    If CurrentTable.Rows.Count > 0 Then   \'当前表,行大于0时执行(表不为空时执行)
        For i As Integer = vars("row") To CurrentTable.Rows.Count - 1 \'循环行
            For j As Integer = vars("col")+1 To CurrentTable.Cols.Count - 1 \'循环列
                If CStr(CurrentTable.Rows(i)(CurrentTable.Cols(j).Name)) Like "*" & textfind.Text & "*" Then \'判断转换为字符串的单元格数据是不是包含控件textbox1里的数据
                    vars("row") = i   \'累加到变量
                    vars("col") = j   \'累加到变量
                    CurrentTable.Select(i,j)   \'定位当前表的单元格
                    Return   \'找到了就终止执行程序
                End If
            Next
            vars("col") = 0 \'在所有列没找到就重0列开始
        Next
        vars("col") = 0  \'重头再来
        vars("row") = 0  \'重头再来
        MessageBox.Show("已找完所有,将重头再找.","提示",MessageBoxButtons.OK,MessageBoxIcon.Information)
    End If
End If

--  作者:有点蓝
--  发布时间:2019/6/18 23:15:00
--  
多谢分享,不过貌似第一列被忽略了哦,这样改改

……
            vars("col") = -1 \'在所有列没找到就重0列开始
        Next
        vars("col") = -1  \'重头再来
        vars("row") = 0  \'重头再来
……

--  作者:爱好所有
--  发布时间:2019/6/19 12:40:00
--  
谢谢蓝版主查看,但没有错啊前面有判断的 f Vars("col") = CurrentTable.Cols.Count -1 Then \'如果定位的单元格列的坐标是最后一列则赋值全局变量col和row Vars("col") = -1 Vars("row") = Vars("row") +1 End If
[此贴子已经被作者于2019/6/19 12:40:27编辑过]

--  作者:有点甜
--  发布时间:2019/6/19 15:17:00
--  
谢谢分享。
--  作者:fivetable
--  发布时间:2019/12/27 10:16:00
--  
感谢分享!我就是要做出这,模仿EXCETX表格的查找功能,结果调试了N个小时,发现越想,越复杂,就来论坛找找,结果真的有,真的万分感谢!
--  作者:江南小镇
--  发布时间:2019/12/27 16:23:00
--  
老师,上面代码应用能做个例子吗?
--  作者:gxx0723
--  发布时间:2022/4/12 12:51:00
--  
很不错