以文本方式查看主题 - 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 -- 隔行选择 可以在这个的基础上帮忙改一下吗? 在匹配了后 跳至下一行 改为跳两行 然后第二次上一行 三次下两行 大概意思就是 单点下移两行,双点上移一行,这样一次类推可以吗? 感谢 感谢 [此贴子已经被作者于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 |
||||
-- 作者:有点色 -- 发布时间:2017/2/3 13:39:00 --
|
||||
-- 作者: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 |