2013-06-01 2 views
0

Я установил очень простое приложение с элементом управления веб-браузером и невидимой панелью с 2 кнопками и текстовым полем для ввода URL-адреса.Me.Keyup не работает, если я не делаю панель видимой, а затем нажмите кнопку, чтобы закрыть ее.

Когда я запускаю приложение, количество нажатий клавиш ничего не сделает даже с нелепо простым кодом, подобным этому.

Private Sub Frm_Main_Load(sender As Object, e As System.EventArgs) Handles Me.Load 
    My.Settings.Reload() 
    Dim URL As New Uri(Application.StartupPath & "\" & My.Settings.path) 
    WebBrowser1.Url = URL 
    TXT_URL.Text = My.Settings.path 
    Me.KeyPreview = True 
End Sub 



Private Sub Frm_Main_KeyUp(sender As Object, e As System.Windows.Forms.KeyEventArgs) Handles Me.KeyUp 
    Beep() 
End Sub 

Однако если выбрать пункт меню, чтобы отобразить панель затем сразу же нажмите на кнопку на панели, чтобы установить pnl_url.visible = ложь, то я могу нажать клавиши и получить ответ от рутины KeyUp.

Любые идеи? Я не могу понять, что делать, чтобы заставить приложение tostart принимать нажатия клавиш, не заставляя пользователя нажать что-нибудь. me.focus или «control». Фокус тоже ничего не делает.

написана в Visual Studio 2010

** * ** * ** * ** * ** * ** * *EDIT* ** * ** * ** * ** * ** * ** * ** * ** * *** я понял, что это управление веб-браузер это задыхалось, но не могло понять, как заставить его сотрудничать. мой друг исправил это для меня.

 Private Sub WebBrowser1_PreviewKeyDown(sender As Object, e As System.Windows.Forms.PreviewKeyDownEventArgs) Handles WebBrowser1.PreviewKeyDown 
     Dim ee As New KeyEventArgs(e.KeyData) 

     Me.Frm_Main_KeyUp(sender, ee) 
    End Sub 

ответ

1

Это не так, потому что веб-браузер имеет фокус при запуске приложения. Браузер реализует собственную среду выполнения, которая также заинтересована в нажатиях клавиш. Например, Javascript имеет доступ к ключевым событиям. Путем обезглавливания с вашей панелью, вы, вероятно, закончили тем, что добавили новый контроль, теперь работает KeyUp.

Вам понадобится большее оружие, чем Form.KeyPreview. Вы также можете переопределить метод FormCmdKey() формы. Он будет работать, даже если браузер имеет фокус. Помните, однако, что этот метод был предназначен для того, чтобы вы могли использовать сочетания клавиш. Как нажать F1, чтобы показать справку. Командные клавиши, таким образом, имя. Он не подходит для обычной обработки клавиатуры.

И, конечно же, вы по-прежнему будете разорвать любой скрипт в браузере. Который, возможно, также захочет увидеть ярлык, подобный этому.

Учтите, что основная проблема заключается в том, что ваш подход нарушен.