COCO研究院

 找回密碼
 註冊
搜索
查看: 8045|回復: 17

[其他程式語言] 請教 VB 的 FOCUS 問題

[複製鏈接]
發表於 17-1-14 10:10 | 顯示全部樓層 |閱讀模式
22222.png

如圖, 我以 VB2010寫了兩個程式.
以滑鼠按 程式A, 會聚焦(Focus) 程式A視窗
以滑鼠按 程式B, 會聚焦(Focus) 程式B視窗

程式A是我的”主程式”,我希望大部份時間, Focus在程式A視窗.

但是, 程式B執行中, 有時會 "自動"把聚焦搶過去.
此時, 就只好 以滑鼠按 程式A, 再度聚焦 程式A視窗.

請問 ~~~~~~
有沒辦法, 讓 程式B "不要自動" 搶聚焦 ?
或是,以程式碼控制碼,儘量大部時間, Focus 留在A程式?
THANKS!


 樓主| 發表於 17-1-14 10:39 | 顯示全部樓層
補充說明: "程式A是我的”主程式”,我希望大部份時間, Focus在程式A視窗."
   ---> 因為程式A, 有用到很多鍵盤"快速鍵",
          如果"失焦",快速鍵就沒作用了.
發表於 17-1-14 15:16 | 顯示全部樓層
底下並不是 VB 環境 ... 不曉得有沒有什麼幫助? ... :

Set Focus到特定的視窗  Delphi K.Top

評分

參與人數 1金錢 +2 收起 理由
googleandy + 2 值得參考,感謝!

查看全部評分

發表於 17-1-14 15:48 | 顯示全部樓層
要不要加一個小段在執行B程式後

立刻執行回A程式

譬如控制滑鼠去按A

評分

參與人數 1金錢 +2 收起 理由
googleandy + 2 好主意,程式做得到,但少數情況下會出現災.

查看全部評分

 樓主| 發表於 17-1-14 17:19 | 顯示全部樓層
AGWZ 發表於 17-1-14 15:48
要不要加一個小段在執行B程式後

立刻執行回A程式

現在關鍵問題仍是⋯⋯B程式為何會自動"搶"Focus.

B程式是券商給的API,
我在上面添加一些自寫的程式碼⋯⋯即每10秒讀我的庫存部位,

會不會這就是B程式自動搶Focus的原因?
 樓主| 發表於 17-1-14 17:25 | 顯示全部樓層
補充說明:B程式也有使用連結 EXCEL  DDE,以顕示最新商品報價。
發表於 17-1-14 17:27 | 顯示全部樓層
googleandy 發表於 17-1-14 17:19
現在關鍵問題仍是⋯⋯B程式為何會自動"搶"Focus.

B程式是券商給的API,

底下的網頁, 不知有沒有什麼幫助? ... :

Visual Basic Reference  Activate, Deactivate Events  MSDN.Microsoft

評分

參與人數 1金錢 +2 收起 理由
googleandy + 2 按一個讚

查看全部評分

 樓主| 發表於 17-1-14 17:58 | 顯示全部樓層
tinyding 發表於 17-1-14 17:27
底下的網頁, 不知有沒有什麼幫助? ... :

Visual Basic Reference  Activate, Deactivate Events  MSDN.M ...

哦,看起來問題的關鍵似乎這裡面,我得花一些時間逐項慢慢研究,有結果再回覆。感謝T大。

評分

參與人數 1金錢 +1 收起 理由
tinyding + 1 ^_^

查看全部評分

 樓主| 發表於 17-1-15 10:59 | 顯示全部樓層
本帖最後由 googleandy 於 17-1-15 11:20 編輯
tinyding 發表於 17-1-14 17:27
底下的網頁, 不知有沒有什麼幫助? ... :

Visual Basic Reference  Activate, Deactivate Events  MSDN.M ...

請教T大(或任何高手),

  如果, 現在程式 B 是activate狀態, 我打算~~
   讓 程式 B Deactivate, 而且, 程式 A 變成 activate

請問如何處理? thanks.
(我試過,模擬滑鼠click可以做到,但不是好方法.)

因為現在程式 B 是activate狀態,讓 程式 B Deactivate 似乎可以用
Call Form1_Deactivate(sender, e)

但如何讓 程式 A 變成 activate ?


發表於 17-1-15 11:54 | 顯示全部樓層
用Windows API應該可以達成你的需要
這篇參考看看

評分

參與人數 2金錢 +3 收起 理由
googleandy + 2 按一個讚
tinyding + 1 感謝分享

查看全部評分

發表於 17-1-15 12:10 | 顯示全部樓層
googleandy 發表於 17-1-15 10:59
請教T大(或任何高手),

  如果, 現在程式 B 是activate狀態, 我打算~~

參考一下底下的例子 ... 其中第一個並不是 VB 環境 ... :

[代码]Delphi实现窗体始终前台显示且获得焦点  ET民工

Me.Activate() not working in Deactivate Event  Visual Studio

評分

參與人數 1金錢 +2 收起 理由
googleandy + 2 按一個讚

查看全部評分

發表於 17-1-15 12:20 | 顯示全部樓層

評分

參與人數 3金錢 +5 收起 理由
AGWZ + 2 感謝分享
googleandy + 2 感謝分享
tinyding + 1 感謝分享

查看全部評分

發表於 17-1-16 09:15 | 顯示全部樓層
如果B程式 只是去讀你的倉位
那我看你的A程式  直接WRAP B程式裡的API 還比較快一點
畢竟B 如果在A 裡面就好控制多了

評分

參與人數 1金錢 +2 收起 理由
googleandy + 2

查看全部評分

 樓主| 發表於 17-1-16 12:22 | 顯示全部樓層
iwillbeback44 發表於 17-1-16 09:15
如果B程式 只是去讀你的倉位
那我看你的A程式  直接WRAP B程式裡的API 還比較快一點
畢竟B 如果在A 裡面就 ...

I大的建議是好建議。

A程式是MENU
其實除了B程式,還有C、D、E、F程式。

謝謝I大,感恩。

 樓主| 發表於 17-1-16 12:27 | 顯示全部樓層
綜合以上,我試過以 SetForeGroundWindow 基本上可以解決問題。非常感謝大家熱心討論和建議。

評分

參與人數 1金錢 +1 收起 理由
tinyding + 1 ^_^

查看全部評分

您需要登錄後才可以回帖 登錄 | 註冊

本版積分規則

手機版|Archiver|站長信箱|廣告洽詢|COCO研究院

GMT+8, 24-12-27 01:23

Powered by Discuz! X3.4

Copyright © 2001-2023, Tencent Cloud.

快速回復 返回頂部 返回列表
理財討論網站 |