重金求救!!!!!!!!!!!!!!!!!!!!!!!!!!!!!

leolan 2003-12-06 12:06:54
在一個UserControl上有這樣的設置:當鼠標移到某個Control(Ctl)上時使該Ctl獲得Focus.
1. 問題: 把該UserControl加到一個Form上面,怎樣使當這個Form不是當前活動窗口時,不發生上述事件.(因為這樣的話,這個Form就變成了活動窗口,而原先另外一個窗口就看不見了)
我的思路是利用API返回當前Form的Name(或其它),然後再根據這個Name判斷要不要發生上述事件.請問是這樣的嗎?如果是的話,該用哪個API呢?


2. 還是同一個UserControl,其所有者(一個Form)的Form_KeyPress事件是這樣的:當按回車鍵時,Focus跳到Form上的下一個Control.但是我想當Focus在UserControl上時觸發UserControl的KeyPress,而不發生Form_KeyPress事件,就是說不用將Focus轉到下個Control.

如果有哪位高手能幫得上我的話,小弟不用感激,必將銘記在心!(當然分是少不了的啦~)
在線等待中.............


...全文
35 16 打赏 收藏 转发到动态 举报
写回复
用AI写文章
16 条回复
切换为时间正序
请发表友善的回复…
发表回复
leolan 2003-12-08
  • 打赏
  • 举报
回复
To: goldstar3000(金星)
請問如何綁定?
fleshboy 2003-12-08
  • 打赏
  • 举报
回复
如果控件不多就分开处理吧
或者,想想其它什么办法,
不用老想一种办法。
goldstar3000 2003-12-07
  • 打赏
  • 举报
回复
你是否为将这个控件的keyress事件和cboColor的keyress事件绑定到一起
simanh 2003-12-06
  • 打赏
  • 举报
回复
up
leolan 2003-12-06
  • 打赏
  • 举报
回复
可能是我沒說明白吧:)
我把代碼貼出來:
這是Form上的代碼:
Private Sub Form_KeyPress(KeyAscii As Integer)
Select Case KeyAscii
Case vbKeyEscape
SendKeys "%{C}"
Case vbKeyReturn
SendKeys "{TAB}"
KeyAscii = 0
End Select
End Sub

這是UserControl上的代碼:
Private Sub cboColor_KeyPress(KeyAscii As Integer)
Dim l_intPos As Integer
Dim l_strTmp As String
'轉換成大寫
If KeyAscii >= Asc("a") And KeyAscii <= Asc("z") Then KeyAscii = KeyAscii + Asc("A") - Asc("a")
l_strTmp = Trim(cboColor.Text)
'按回車鍵則添加記錄(空記錄或重復記錄除外)
If KeyAscii = vbKeyReturn And l_strTmp <> "" Then
For l_intPos = 0 To cboColor.ListCount - 1
If StrComp(l_strTmp,cboColor.List(l_intPos),vbTextCompare) = 0 Then
cboColor.Text = ""
Exit Sub
End If
Next
cboColor.AddItem l_strTmp, 0
cboColor.Text = ""
End If
End Sub

現在的問題的是:在usercontrol上的cbocolor上按回車鍵時,運行的是Form_KeyPress而非
cboColor_KeyPress事件.請問這樣的沖突該怎樣解決呀???能不能使得在cbocolor上按回車鍵時就AddItem,而在其它地方按回車鍵時就Sendkeys "{tab}"呢????????
yangfanatcsdn 2003-12-06
  • 打赏
  • 举报
回复
黔驴技穷 i'm sorry

leolan 2003-12-06
  • 打赏
  • 举报
回复
yangfanatcsdn(好好学习天天向上)
用 Screen.ActiveForm is yourForm 判断。
求求你,给点分吧!

錯啦錯啦,Screen.ActiveForm 只能判斷同這個程序裡的Form,
但如果我在運行這個程序時,又打開另外一個程序或別的什麼東西,只要鼠標移到usercontrol的
control上,它還是會得到焦點的.(而另外的那個程序就隱藏到它的下面了)
yangfanatcsdn 2003-12-06
  • 打赏
  • 举报
回复
不明白Q2的意思
焦点不会自动在控件间转换,要么按Tab键,要么编程实现,要么设置快速访问键,要么使用鼠标。。。。
而且只要你不设置Form.KeyPreview = True,窗体不会截获控件的击键事件。
leolan 2003-12-06
  • 打赏
  • 举报
回复
To: yangfanatcsdn(好好学习天天向上)

謝謝你啦,這麼簡單的方法我怎麼就沒想到呢??(呵呵,你放心,少不了你的分)
第一個問題已經解決了,不過你先別急,我的第二個問題還沒解決啊.再等一會吧,看有沒有哪位好 心的大蝦能幫幫我,搞定它!!!!!!!!

To: fleshboy(百菜)
謝謝!!能再幫我看看第二題嗎?
leolan 2003-12-06
  • 打赏
  • 举报
回复
typedef struct tagWINDOWINFO {
DWORD cbSize;
RECT rcWindow;
RECT rcClient;
DWORD dwStyle;
DWORD dwExStyle;
//--------------------
DWORD dwWindowStatus;
//--------------------
UINT cxWindowBorders;
UINT cyWindowBorders;
ATOM atomWindowType;
WORD wCreatorVersion;
} WINDOWINFO, *PWINDOWINFO, *LPWINDOWINFO;

不好意思,這段東東我是什麼呀,怎麼用的???
yangfanatcsdn 2003-12-06
  • 打赏
  • 举报
回复
不会不回来了吧?





我等到花儿都谢了。。。走人!
yangfanatcsdn 2003-12-06
  • 打赏
  • 举报
回复
用 Screen.ActiveForm is yourForm 判断。
求求你,给点分吧!
leolan 2003-12-06
  • 打赏
  • 举报
回复
知道知道,謝了啊,不過讓我試下先Z,呵呵..
fleshboy 2003-12-06
  • 打赏
  • 举报
回复
用 WindowFromPoint 获取当前鼠标下的窗体句柄hWnd,然后用 GetWindowInfo 判断这个窗体当前是否是活动的。
函数原型如下:
====================
WindowFromPoint
The WindowFromPoint function retrieves a handle to the window that contains the specified point.
HWND WindowFromPoint(
POINT Point // point
);

WindowFromPoint 返回鼠标所指窗口的句柄,
Point参数是一个结构体,有X,Y两点,声明如下:
Public Type PointAPI
X As Long
Y As Long
End Type

======================
GetWindowInfo
The GetWindowInfo function retrieves information about the specified window.

BOOL GetWindowInfo(
HWND hwnd, // handle to window
PWINDOWINFO pwi // window information
);

If the function succeeds, the return value is nonzero.
If the function fails, the return value is zero.
--------------------
参数hwnd就用前面由 WindowFromPoint(Point) 返回的句柄
pwi 是 一个WindowInfo 结构体,定义如下:

typedef struct tagWINDOWINFO {
DWORD cbSize;
RECT rcWindow;
RECT rcClient;
DWORD dwStyle;
DWORD dwExStyle;
//--------------------
DWORD dwWindowStatus;
//--------------------
UINT cxWindowBorders;
UINT cyWindowBorders;
ATOM atomWindowType;
WORD wCreatorVersion;
} WINDOWINFO, *PWINDOWINFO, *LPWINDOWINFO;

上面的结构体中 dwWindowStatus 参数就是我们要用到的值
dwWindowStatus
The window status. If this member is WS_ACTIVECAPTION, the window is active. Otherwise, this member is zero.
如果 dwWindowStatus 的值是 0 的话,那么这个窗口就不活动的,也就不是我们所要的 :)
======================
我时间紧,就说这些了,剩下的我想楼主也该知道怎么做了。
leolan 2003-12-06
  • 打赏
  • 举报
回复
再幫自己UP一下~
高手快來啊!!!!!!!!!!!
leolan 2003-12-06
  • 打赏
  • 举报
回复
高手都去哪了?????????????????????
問個簡單點的吧?

怎樣判斷usercontrol的所有者(Form)是不是當前的活動窗口????解決即結貼!!!謝謝

7,765

社区成员

发帖
与我相关
我的任务
社区描述
VB 基础类
社区管理员
  • VB基础类社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧