以文本方式查看主题

-  Foxtable(狐表)  (http://foxtable.com/bbs/index.asp)
--  专家坐堂  (http://foxtable.com/bbs/list.asp?boardid=2)
----  [求助] 窗体afterload事件  (http://foxtable.com/bbs/dispbbs.asp?boardid=2&id=125150)

--  作者:goodhawk
--  发布时间:2018/9/20 21:59:00
--  [求助] 窗体afterload事件
参照这个帖子: http://www.foxtable.com/bbs/dispbbs.asp?boardid=2&id=120985

但是我想把事件发生在 窗体加载的时候, 也就是打开这个窗体 afterload 这个事件里头:

如下代码, 如果是在窗体上加载一个按钮是可以执行的, 但是如果写在 afterload 里头没有反应。

Dim web As System.Windows.Forms.WebBrowser = e.Form.controls("webbrowser1").basecontrol
Dim vw As WinForm.WebBrowser = e.Form.Controls("WebBrowser1")

web.ScriptErrorsSuppressed = True

vw.Address = "https://XXXXX.com"


Dim vu = web.Document.GetElementById("mobile")
Dim vp = web.Document.GetElementById("password")
vu.SetAttribute("value", "test")
vp.SetAttribute("value", "test")
web.Document.InvokeScript("login")

--  作者:有点甜
--  发布时间:2018/9/20 22:02:00
--  

Dim web As System.Windows.Forms.WebBrowser = e.Form.controls("webbrowser1").basecontrol
Dim vw As WinForm.WebBrowser = e.Form.Controls("WebBrowser1")
web.ScriptErrorsSuppressed = True
vw.Address = "https://XXXXX.com"

Do Until web.ReadyState = 4
    Application.DoEvents
Loop

Dim vu = web.Document.GetElementById("mobile")
Dim vp = web.Document.GetElementById("password")
vu.SetAttribute("value", "test")
vp.SetAttribute("value", "test")
web.Document.InvokeScript("login")


--  作者:goodhawk
--  发布时间:2018/9/21 11:27:00
--  
@谢谢有点甜的解答, 按照你这边的做法, 做了一下并不能实现跳转, 主要是 你红色的部分 和 红色以下的部分, 基本上是同时执行的。

我自己稍微研究了一下, 有2种方式可以实现:

方法一:  把你的那串红色的字改为一个弹窗  messagebox.show

方法二:  启用timertick,
1) aferload :
Dim web As System.Windows.Forms.WebBrowser = e.Form.controls("webbrowser1").basecontrol
web.ScriptErrorsSuppressed = True

Dim vw As WinForm.WebBrowser = e.Form.Controls("WebBrowser1")
vw.Address = "https://XXXX"

e.Form.TimerEnabled = True
P_IS_LOGIN_BMC = False

2) timertick:
Dim web As System.Windows.Forms.WebBrowser = e.Form.controls("webbrowser1").basecontrol
web.ScriptErrorsSuppressed = True

If  web.ReadyState.Complete And P_IS_LOGIN_BMC = False Then         

Dim vu = web.Document.GetElementById("mobile")
Dim vp = web.Document.GetElementById("password")
vu.SetAttribute("value", "test")
vp.SetAttribute("value", "test")
web.Document.InvokeScript("login")
        
        e.Form.TimerEnabled = False
        P_IS_LOGIN_BMC = True 
End If

--  作者:有点甜
--  发布时间:2018/9/21 11:49:00
--  

加上条件,比如(具体问题做个例子上来测试)

 

Do Until web.ReadyState = 4 AndAlso web.Document.GetElementById("mobile") isnot Nothing
    Application.DoEvents
Loop

 

 


--  作者:goodhawk
--  发布时间:2018/9/21 11:55:00
--  
太赞了, 非常好, 你的这个使代码优雅许多, 很赞