以文本方式查看主题

-  Foxtable(狐表)  (http://foxtable.net/bbs/index.asp)
--  专家坐堂  (http://foxtable.net/bbs/list.asp?boardid=2)
----  隔行选择  (http://foxtable.net/bbs/dispbbs.asp?boardid=2&id=95699)

--  作者:yangwenghd
--  发布时间:2017/2/2 14:09:00
--  隔行选择
可以在这个的基础上帮忙改一下吗?

在匹配了后 跳至下一行 改为跳两行 
然后第二次上一行
三次下两行

大概意思就是 单点下移两行,双点上移一行,这样一次类推可以吗?
感谢 感谢 

图片点击可在新窗口打开查看此主题相关图片如下:qq截图20170202145811.jpg
图片点击可在新窗口打开查看


 下载信息  [文件大小:   下载次数: ]
图片点击可在新窗口打开查看点击浏览该文件:隔行选择.table


[此贴子已经被作者于2017/2/2 14:58:25编辑过]

--  作者:有点色
--  发布时间:2017/2/2 16:38:00
--  
Dim lbl1 As WinForm.Label = e.Form.Controls("Label1")
Dim txt1 As WinForm.TextBox = e.Form.Controls("TextBox1")
If lbl1.text <> txt1.text Then
    msgbox("不匹配")
    \'Audio.Play("d:\\test.wav")
Else
    Dim t As Table = Tables("英语")
    \'Dim ar As Row = t.current
    \'ar("目录_状态") = "已学习"
    \'t.Current("听写_次数") += 1
    If e.Form.controls("checkbox1").checked Then
        Dim drs As List(Of DataRow) = t.DataTable.Select("目录_状态 Is null Or 目录_状态 <> \'学习中\'")
        If drs.count > 0 Then
            Dim idx As Integer = Rand.Next(drs.count-1)
            t.position = t.FindRow(drs(idx))
            Dim r = t.current
            r("目录_状态") = "已学习"
            Dim sp As New DotNetSpeech.SpVoice()
            sp.Speak(r("目录_英文"), DotNetSpeech.SpeechVoiceSpeakFlags.SVSFlagsAsync)
            txt1.text = ""
        Else
            msgbox("已学完")
        End If
    Else
        static flag As Integer = 0
        static pidx As Integer = 0
        Dim idx As Integer
        If flag = 0 Then
            idx = t.FindRow("目录_状态 is null or 目录_状态 <> \'学习中\'", t.Position+1, True)
            pidx = idx
            idx = t.FindRow("目录_状态 is null or 目录_状态 <> \'学习中\'", idx+1, True)
            flag = 1
        Else
            idx = pidx
            flag = 0
        End If
       
        If idx = -1  Then
            msgbox("已学完")
        Else
            Dim r As Row = t.Rows(idx)
            t.Position = idx
            Dim sp As New DotNetSpeech.SpVoice()
            sp.Speak(r("目录_英文"), DotNetSpeech.SpeechVoiceSpeakFlags.SVSFlagsAsync)
            txt1.text = ""
        End If
    End If
End If

--  作者:yangwenghd
--  发布时间:2017/2/3 10:46:00
--  
谢谢 谢谢  非常感谢 我以为这个功能需要测试很多次,感谢 ,可以了,只是筛选后就乱了,还有就是不能首尾相连,如果是最后一行往下跳就选择第二行,这个可以吗? 感谢 感谢 
--  作者:有点色
--  发布时间:2017/2/3 11:59:00
--  

1、你的逻辑有问题,没有你这样逻辑。

 

2、你要看懂代码,不然你永远做不到你需要的东西。

 

3、我测试没问题,如果到最后一行,默认就会找到下一行满足条件的行啊。

 

 


--  作者:yangwenghd
--  发布时间:2017/2/3 12:08:00
--  
谢谢 是这样的 一个表格里面有很多状态, 在不同的时候筛选出使用,所有需要筛选,能帮帮看一下筛选后还能下两行上一行的功能吗?感谢 感谢 
--  作者:有点色
--  发布时间:2017/2/3 12:14:00
--  

 把2楼的flag改成vars("flag"),然后在你表的筛选事件AfterFilter写代码

 

Vars("flag") = 0


--  作者:yangwenghd
--  发布时间:2017/2/3 13:07:00
--  
谢谢  能在帮忙看看吗?

Dim lbl1 As WinForm.Label = e.Form.Controls("Label1")
Dim txt1 As WinForm.TextBox = e.Form.Controls("TextBox1")
If lbl1.text <> txt1.text Then
    msgbox("不匹配")
    \'Audio.Play("d:\\test.wav")
Else
    Dim t As Table = Tables("英语")
    \'Dim ar As Row = t.current
    \'ar("目录_状态") = "已学习"
    \'t.Current("听写_次数") += 1
    If e.Form.controls("checkbox1").checked Then
        Dim drs As List(Of DataRow) = t.DataTable.Select("目录_状态 Is null Or 目录_状态 <> \'学习中\'")
        If drs.count > 0 Then
            Dim idx As Integer = Rand.Next(drs.count-1)
            t.position = t.FindRow(drs(idx))
            Dim r = t.current
            r("目录_状态") = "已学习"
            Dim sp As New DotNetSpeech.SpVoice()
            sp.Speak(r("目录_英文"), DotNetSpeech.SpeechVoiceSpeakFlags.SVSFlagsAsync)
            txt1.text = ""
        Else
            msgbox("已学完")
        End If
    Else
        static vars("flag") As Integer = 0
        static pidx As Integer = 0
        Dim idx As Integer
        If vars("flag") = 0 Then
            idx = t.FindRow("目录_状态 is null or 目录_状态 <> \'学习中\'", t.Position+1, True)
            pidx = idx
            idx = t.FindRow("目录_状态 is null or 目录_状态 <> \'学习中\'", idx+1, True)
            vars("flag") = 1
        Else
            idx = pidx
            vars("flag") = 0
        End If
        
        If idx = -1  Then
            msgbox("已学完")
        Else
            Dim r As Row = t.Rows(idx)
            t.Position = idx
            Dim sp As New DotNetSpeech.SpVoice()
            sp.Speak(r("目录_英文"), DotNetSpeech.SpeechVoiceSpeakFlags.SVSFlagsAsync)
            txt1.text = ""
        End If
    End If
End If

图片点击可在新窗口打开查看此主题相关图片如下:qq截图20170203130556.jpg
图片点击可在新窗口打开查看


--  作者:有点色
--  发布时间:2017/2/3 13:39:00
--  
 下载信息  [文件大小:   下载次数: ]
图片点击可在新窗口打开查看点击浏览该文件:隔行选择.table


--  作者:yangwenghd
--  发布时间:2017/2/3 17:48:00
--  
感谢 感谢 
如果只是单独的实现这个功能, 应该怎么改一下啊  谢谢你

Dim t As Table = Tables("主窗口_Table1")
If Forms("主窗口").Controls("CheckBox1").Checked
    Dim idx As Integer = Rand.Next(t.rows.count)
    t.Position = idx
Else
    If t.Position < t.Rows.Count - 1
        t.Position = t.Position + 1
    Else
        t.Position = 0
    End If
End If

--  作者:有点色
--  发布时间:2017/2/3 18:03:00
--  
Dim t As Table = Tables("英语")
If Forms("窗口2").Controls("CheckBox1").Checked
    Dim idx As Integer = Rand.Next(t.rows.count)
    t.Position = idx
Else
    Dim idx As Integer = 0
    If vars("flag") = 0 Then
        idx = t.Position + 2
        vars("flag") = 1
        If idx >= t.Rows.Count Then idx = idx - t.Rows.count
    Else
        idx = t.Position - 1
        vars("flag") = 0
        If idx < 0 Then idx = t.Rows.count + idx
    End If
    t.Position = idx
End If