Foxtable(狐表)用户栏目专家坐堂 → [求助] 窗体afterload事件


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

主题:[求助] 窗体afterload事件

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


加好友 发短信
等级:幼狐 帖子:120 积分:1134 威望:0 精华:0 注册:2018/3/22 15:58:00
[求助] 窗体afterload事件  发帖心情 Post By:2018/9/20 21:59:00 [只看该作者]

参照这个帖子: 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")

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


加好友 发短信
等级:版主 帖子:85326 积分:427815 威望:0 精华:5 注册:2012/10/18 22:13:00
  发帖心情 Post By: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
  3楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:幼狐 帖子:120 积分:1134 威望:0 精华:0 注册:2018/3/22 15:58:00
  发帖心情 Post By: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

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


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

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

 

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

 

 


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


加好友 发短信
等级:幼狐 帖子:120 积分:1134 威望:0 精华:0 注册:2018/3/22 15:58:00
  发帖心情 Post By:2018/9/21 11:55:00 [只看该作者]

太赞了, 非常好, 你的这个使代码优雅许多, 很赞 

 回到顶部