Foxtable(狐表)用户栏目专家坐堂 → 代码执行问题


  共有1760人关注过本帖树形打印复制链接

主题:代码执行问题

帅哥哟,离线,有人找我吗?
lshshlxsh
  1楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:三尾狐 帖子:651 积分:7622 威望:0 精华:0 注册:2013/12/11 17:49:00
代码执行问题  发帖心情 Post By:2018/3/21 9:52:00 [只看该作者]

按钮1 代码

Dim dw As WinForm.ComboBox = e.Form.Controls("单位")
Dim weba As System.Windows.Forms.WebBrowser = e.Form.controls("webbrowser1").basecontrol
weba.ScriptErrorsSuppressed = True
Do Until weba.ReadyState = 4
    Application.DoEvents
Loop

Dim wydw = weba.Document.GetElementById("dw")
wydw.SetAttribute("value",dw.Text )
Dim submit = weba.Document.GetElementById("cx")
submit.InvokeMember("click")


按钮2 代码
Dim wy As WinForm.WebBrowser = e.Form.Controls("WebBrowser1")
Dim t1 As WinForm.Table = e.Form.Controls("Table1")

Dim web As New System.Windows.Forms.WebBrowser()
web.ScriptErrorsSuppressed = True
web.Navigate(wy.Address)
Do Until web.ReadyState = 4
    Application.DoEvents
Loop

Dim Cols() As String = {"公司","单位","日期","币别","支付总金额","金额","申请人","资金类型","实际支付日期","发生期间","应支付期间","类型","开户银行","账号","银行账号","应支付方式","财务支付方式","制单时间","请款单序号","资金申请单序号","备注","制单人","序号","打印标志" }

Dim elems As object = web.Document.GetElementById("tb").GetElementsByTagName("tr")

DataTables("临时资金流动清单表").RejectChanges
Dim m As Integer = 0
Dim k As Integer
For Each elem As object In elems
    Dim i As Integer = -1
    m = m + 1
    If m >=3 And  m< elems.count  Then  '因为网页的表格有标题,如果不判断,就会增加出一个空行
        
        t1.Table.AddNew
        Dim tdelems As object =  elem.GetElementsByTagName("td")
        For Each tdelem As object In tdelems
            i = i + 1
            t1.Table.Current(Cols(i)) = tdelem.Innertext
        Next
        t1.Table.Current.Checked  =True
    End If
Next


请问一下为什么我这两段代码分开执行能取数   放到一个按钮 取数就错了  感觉第一段没执行 就到第二段代码了 



 回到顶部
帅哥哟,离线,有人找我吗?
有点甜
  2楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:版主 帖子:85326 积分:427815 威望:0 精华:5 注册:2012/10/18 22:13:00
  发帖心情 Post By:2018/3/21 10:14:00 [只看该作者]

应该是按钮1模拟点击登陆之后,还没有跳转到新的网页,你按钮2就执行了。试试改改

 

Dim dw As WinForm.ComboBox = e.Form.Controls("单位")
Dim weba As System.Windows.Forms.WebBrowser = e.Form.controls("webbrowser1").basecontrol
weba.ScriptErrorsSuppressed = True
Do Until weba.ReadyState = 4
    Application.DoEvents
Loop


Dim wydw = weba.Document.GetElementById("dw")
wydw.SetAttribute("value",dw.Text )
Dim submit = weba.Document.GetElementById("cx")
submit.InvokeMember("click")


Dim t1 As WinForm.Table = e.Form.Controls("Table1")
Dim web = e.Form.controls("webbrowser1").basecontrol
Do Until web.ReadyState = 4 AndAlso web.Document.GetElementById("tb") IsNot Nothing AndAlso web.Document.GetElementById("tb").GetElementsByTagName("tr").count > 1
    Application.DoEvents
Loop


Dim Cols() As String = {"公司","单位","日期","币别","支付总金额","金额","申请人","资金类型","实际支付日期","发生期间","应支付期间","类型","开户银行","账号","银行账号","应支付方式","财务支付方式","制单时间","请款单序号","资金申请单序号","备注","制单人","序号","打印标志" }


Dim elems As object = web.Document.GetElementById("tb").GetElementsByTagName("tr")


DataTables("临时资金流动清单表").RejectChanges
Dim m As Integer = 0
Dim k As Integer
For Each elem As object In elems
    Dim i As Integer = -1
    m = m + 1
    If m >=3 And  m< elems.count  Then  '因为网页的表格有标题,如果不判断,就会增加出一个空行
       
        t1.Table.AddNew
        Dim tdelems As object =  elem.GetElementsByTagName("td")
        For Each tdelem As object In tdelems
            i = i + 1
            t1.Table.Current(Cols(i)) = tdelem.Innertext
        Next
        t1.Table.Current.Checked  =True
    End If
Next


 回到顶部
帅哥哟,离线,有人找我吗?
lshshlxsh
  3楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:三尾狐 帖子:651 积分:7622 威望:0 精华:0 注册:2013/12/11 17:49:00
  发帖心情 Post By:2018/3/21 10:23:00 [只看该作者]

这样也是没查询出来的  结果还是不对   能不能设定第二段代码过1秒再执行

 回到顶部
帅哥哟,离线,有人找我吗?
有点甜
  4楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:版主 帖子:85326 积分:427815 威望:0 精华:5 注册:2012/10/18 22:13:00
  发帖心情 Post By:2018/3/21 11:43:00 [只看该作者]

执行这个代码,msgbox(1)能否弹出?要判断是否进入了第二个页面,就要修改红色代码判断的(你页面的html代码发上来看看)

 

Dim t1 As WinForm.Table = e.Form.Controls("Table1")
Dim web = e.Form.controls("webbrowser1").basecontrol
Do Until web.ReadyState = 4 AndAlso web.Document.GetElementById("tb") IsNot Nothing AndAlso web.Document.GetElementById("tb").GetElementsByTagName("tr").count > 1
    Application.DoEvents
Loop

msgbox(1)


 回到顶部
帅哥哟,离线,有人找我吗?
有点甜
  5楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:版主 帖子:85326 积分:427815 威望:0 精华:5 注册:2012/10/18 22:13:00
  发帖心情 Post By:2018/3/21 11:45:00 [只看该作者]

如果要延迟一秒执行,参考

 

system.threading.thread.sleep(1000)

 

或者

 

static ptime As Date = Nothing
Dim sp As TimeSpan = Date.now - ptime
ptime = Date.now
If sp.TotalMilliseconds < 5000  Then '间隔5000毫秒
    Return
End If


 回到顶部