通常都是設(shè)置一個(gè)字母,也就是Alt+某個(gè)字母。如圖
創(chuàng)新互聯(lián)建站是一家專業(yè)提供望都企業(yè)網(wǎng)站建設(shè),專注與網(wǎng)站設(shè)計(jì)、網(wǎng)站制作、H5技術(shù)、小程序制作等業(yè)務(wù)。10年已為望都眾多企業(yè)、政府機(jī)構(gòu)等服務(wù)。創(chuàng)新互聯(lián)專業(yè)網(wǎng)站建設(shè)公司優(yōu)惠進(jìn)行中。
菜單字母
不清楚熱鍵和快捷鍵是什么區(qū)別
1.如果你是指Chrl+S這樣的快捷鍵,可以設(shè)置ShortCutKeys屬性,屬性窗口就有可視化編輯器。
2.如果你是指"保存(S)",其中s有下劃線這樣的用Alt+字母來訪問的設(shè)置,應(yīng)該在菜單項(xiàng)的Text屬性中使用符號(hào)。符號(hào)后面的字母將被作為快速訪問字符,顯示的時(shí)候不會(huì)被顯示出來,而字母會(huì)自動(dòng)加上下劃線。比如"保存(s)"。
3.和選中標(biāo)記有關(guān)的屬性有兩個(gè)
CheckOnClick 在菜單項(xiàng)上單擊時(shí)是否改變Checked屬性
Checked 設(shè)置/獲取 菜單項(xiàng)是否被選中
4.設(shè)置菜單項(xiàng)的Enabled屬性為False
添加:(先在加一個(gè)contextMenu,再它的添加子菜單的click事件編程)
Try
’使TreeView可以被編輯
TreeView1.LabelEdit = True
‘判斷你是不是選定的是不可編輯的節(jié)點(diǎn),我這里工種節(jié)點(diǎn)不可以被編輯,只有工種下級(jí)的
各個(gè)工種名稱可以被編輯
If Trim(TreeView1.SelectedNode.Text) = "工種" Then
‘添加節(jié)點(diǎn)
AddNode = New TreeNode("請(qǐng)輸入新工種名字")
TreeView1.SelectedNode.Nodes.Add(AddNode)
TreeView1.ExpandAll()
AddNode.BeginEdit()
TreeView1.LabelEdit = True
NodeAdded = True
End If
Catch err As Exception
MsgBox(err.ToString)
End Try
刪除與添加類似,只是如果你的節(jié)點(diǎn)名字從其他處(如數(shù)據(jù)庫)得來,那么你還需要更新數(shù)據(jù)庫
編輯:
Private Sub TreeView1_BeforeLabelEdit(ByVal sender As Object, ByVal e As System.Windows.Forms.NodeLabelEditEventArgs) Handles TreeView1.BeforeLabelEdit
TreeView1.LabelEdit = True ‘使可以編輯
AddNode = TreeView1.SelectedNode
End Sub
Private Sub TreeView1_AfterLabelEdit(ByVal sender As Object, ByVal e As System.windows.Forms.NodeLabelEditEventArgs) Handles TreeView1.AfterLabelEdit
Try
‘此時(shí)你改完了節(jié)點(diǎn)名字
TreeView1.SelectedNode.EndEdit(True)
If e.Label Is Nothing Then
'do nothing
ElseIf e.Node.Text = "工種" Then ‘工種不能改
e.CancelEdit() = True
‘e.Node.Text ,e.Label.ToString 一個(gè)是改前的名字一個(gè)是該后的名字,具體哪個(gè)對(duì)
哪個(gè)請(qǐng)查MSDN
ElseIf Trim(e.Node.Text) "工種" And e.Node.Text e.Label.ToString Then
If MsgBox("此操作會(huì)導(dǎo)致當(dāng)前工種中的所有人員的工種都被更改,是否確定?", MsgBoxStyle.YesNo + MsgBoxStyle.Information, "警告") = MsgBoxResult.Yes Then
。。。。 ‘我的更改
MsgBox("更改成功!", MsgBoxStyle.OKOnly, "提示")
'Call InitTree() ‘有時(shí)要重新把treeview初始化一遍,視需求定
End If
End If
Catch err As Exception
MsgBox(err.ToString)
End Try
End Sub
其他:
擋treeview得到焦點(diǎn)時(shí)你可以使用ContextMenu,反之ContextMenu禁用
Private Sub TreeView1_GotFocus(ByVal sender As Object, ByVal e As System.EventArgs) Handles TreeView1.GotFocus
TreeView1.ContextMenu = ContextMenu1
End Sub
Private Sub TreeView1_LostFocus(ByVal sender As Object, ByVal e As System.EventArgs) Handles TreeView1.LostFocus
TreeView1.ContextMenu = Nothing
End Sub
注意:這里沒有在ContextMenu菜單添加“更改”項(xiàng),而是直接更改:即左鍵單擊節(jié)點(diǎn)表示
選中,再單擊一下就可以編輯了,更改之后單擊他處就完成更改,和你在windows中更改文
件名字相似。
1、Label控件用于標(biāo)注、提示其他控件的性質(zhì)、作用、內(nèi)容等不需要用戶編輯的文本,也可以用來簡單輸出少量的文本內(nèi)容。Windows 窗體 Label 控件還可以用來為其他控件定義訪問鍵。在標(biāo)簽 (Label) 控件中定義訪問鍵時(shí),用戶可以按 ALT 鍵和指定字符將焦點(diǎn)移動(dòng)到 Tab 鍵順序中的下一個(gè)控件上。因?yàn)闃?biāo)簽無法接收焦點(diǎn),所以焦點(diǎn)自動(dòng)移動(dòng)到 Tab 鍵順序中的下一個(gè)控件上。使用該技術(shù)向文本框、組合框、列表框和數(shù)據(jù)網(wǎng)格分配訪問鍵。
2、VB.NET中菜單控件有MenuStrip和ContextMenuStrip等2種。
MenuStrip主要用于常規(guī)的菜單系統(tǒng)設(shè)計(jì)。創(chuàng)建支持高級(jí)用戶界面和布局功能的易自定義的常用菜單,例如文本和圖像排序和對(duì)齊、拖放操作、MDI、溢出和訪問菜單命令的其他模式。
ContextMenuStrip主要用于創(chuàng)建上下文菜單或右鍵菜單。
要顯示上下文菜單,或在用戶右擊鼠標(biāo)時(shí)顯示一個(gè)菜單,就使用ContextMenuStrip類。與MenuStrip一樣,ContextMenuStrip也是ToolStripMenuItems對(duì)象的容器,但它派生于ToolStripDropDownMenu。ContextMenu的創(chuàng)建與MenuStrip相同,也是添加ToolStripMenuItems,定義每一項(xiàng)的Click事件,執(zhí)行某個(gè)任務(wù)。彈出菜單應(yīng)賦予特定的控件,為此,要設(shè)置控件的ContextMenuStrip屬性。在用戶右擊該控件時(shí),就顯示該菜單。
窗口邊框(FormBorderStyle)設(shè)為None,窗口(WindowState)設(shè)為Maximized,如果想讓窗口背景透明,將窗口背景顏色和TransparencyKey設(shè)為同一種顏色,按鈕用Label(標(biāo)簽)代替,背景設(shè)為Transparent,邊框設(shè)為None,文字位置一般是下中,Label控件支持無邊框。
動(dòng)感效果在鼠標(biāo)事件(MouseDown按下,MouseUp抬起,MouseEnter進(jìn)入,MouseLeave離開)更換指定的圖片;
添加timer控件還可以使用動(dòng)畫
Private Sub Timer1_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Timer1.Tick
Me.Label1.Refresh()
End Sub
快捷鍵用熱鍵
RegisterHotKey
函數(shù)功能:該函數(shù)定義一個(gè)系統(tǒng)范圍的熱鍵。
函數(shù)原型:BOOL RegisterHotKey(HWND hWnd,intid,UINT fsModifiers,UINT vk);
參數(shù):
hWnd:接收熱鍵產(chǎn)生WM_HOTKEY消息的窗口句柄。若該參數(shù)NULL,傳遞給調(diào)用線程的WM_HOTKEY消息必須在消息循環(huán)中中進(jìn)行處理。
id:定義熱鍵的標(biāo)識(shí)符。調(diào)用線程中的其他熱鍵不能使用同樣的標(biāo)識(shí)符。應(yīng)用功能程序必須定義一個(gè)0X0000-0xBFFF范圍的值。一個(gè)共享的動(dòng)態(tài)鏈接庫(DLL)必須定義一個(gè)0xC000-0xFFFF范圍的值伯GlobalAddAtom函數(shù)返回該范圍)。為了避免與其他動(dòng)態(tài)鏈接庫定義的熱鍵沖突,一個(gè)DLL必須使用GlobalAddAtom函數(shù)獲得熱鍵的標(biāo)識(shí)符。
fsModifoers:定義為了產(chǎn)生WM_HOTKEY消息而必須與由nVirtKey參數(shù)定義的鍵一起按下的鍵。該參數(shù)可以是如下值的組合:
MOD_ALT:按下的可以是任一Alt鍵。MOD_CONTROL:按下的可以是任一Ctrl鍵。
MOD_SHIFT:按下的可以是任一Shift鍵。
MOD_WIN:按下的可以是任一Windows按鍵。
vk:定義熱鍵的虛擬鍵碼。
返回值:若函數(shù)調(diào)用成功,返回一個(gè)非O值。若函數(shù)調(diào)用失敗,則返回值為0。若要獲得更多的錯(cuò)誤信息,可以調(diào)用GetLastError函數(shù)。
備注:當(dāng)某鍵被接下時(shí),系統(tǒng)在所有的熱鍵中尋找匹配者。一旦找到一個(gè)匹配的熱鍵,系統(tǒng)將把WM_HOTKEY消息傳遞給登記了該熱鍵的線程的消息隊(duì)列。該消息被傳送到隊(duì)列頭部,因此它將在下一輪消息循環(huán)中被移去。該函數(shù)不能將熱鍵同其他線程創(chuàng)建的窗口關(guān)聯(lián)起來。
若為一熱鍵定義的擊鍵己被其他熱鍵所定義,則RegisterHotKey函數(shù)調(diào)用失敗。
若hWnd參數(shù)標(biāo)識(shí)的窗口已用與id參數(shù)定義的相同的標(biāo)識(shí)符登記了一個(gè)熱鍵,則參數(shù)fsModifiers和vk的新值將替代這些參數(shù)先前定義的值。
若設(shè)置MOD_KEYUP位,則當(dāng)發(fā)生鍵被按下或被彈起的事件時(shí),窗口將發(fā)送WM_HOTKEY消息。
RegisterHotKey可以被用來在線程之間登記熱鍵。
UnregisterHotKey
函數(shù)功能:該函數(shù)釋放調(diào)用線程先前登記的熱鍵。
函數(shù)原型:BOOL UnregisterHotKey(HWND hWnd,int id);
參數(shù):
hWnd:與被釋放的熱鍵相關(guān)的窗口句柄。若熱鍵不與窗口相關(guān),則該參數(shù)為NULL。
id:定義被釋放的熱鍵的標(biāo)識(shí)符。
返回值:若函數(shù)調(diào)用成功,返回值不為0。若函數(shù)調(diào)用失敗,返回值為0。若要獲得更多的錯(cuò)誤信息,可以調(diào)用GetLastError函數(shù)。
1、首先定義所需要用到的常量
如圖所示,在窗體代碼后定義常量和API函數(shù)
代碼如下:
Public Const WM_HOTKEY As Integer = H312
Public Const MOD_ALT As Integer = H1
Public Const MOD_CONTROL As Integer = H2
Public Const MOD_SHIFT As Integer = H4
Public Const GWL_WNDPROC As Integer = (-4)
Public Declare Auto Function RegisterHotKey Lib "user32.dll" Alias "RegisterHotKey" (ByVal hwnd As IntPtr, ByVal id As Integer, ByVal fsModifiers As Integer, ByVal vk As Integer) As Boolean
Public Declare Auto Function UnRegisterHotKey Lib "user32.dll" Alias "UnregisterHotKey" (ByVal hwnd As IntPtr, ByVal id As Integer) As Boolean
下面過程是注冊(cè)Ctrl+T的組合鍵為組合鍵,假如注冊(cè)成功,則返回true,反之注冊(cè)失敗則返回false,我們可以根據(jù)返回的結(jié)果判斷并提醒用戶注冊(cè)的情況。
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
Dim isResult As Boolean
isResult=RegisterHotKey(Handle, 0, MOD_CONTROL, Asc("T")) ’注冊(cè)Ctrl+T的組合鍵
If isResult = False Then
MsgBox("注冊(cè)熱鍵Ctrl+T失敗")
End If
End Sub
[apge]
下面過程為重載WndProc過程,響應(yīng)熱鍵并處理熱鍵,這里是用來隱藏和顯示程序主界面。
Protected Overrides Sub WndProc(ByRef m As Message)
If m.Msg = WM_HOTKEY Then
System.Diagnostics.Process.Start("C:\WINDOWS\system32\freecell.exe")'運(yùn)行當(dāng)空接龍游戲
End If
MyBase.WndProc(m)
End Sub
最后在關(guān)閉窗體的時(shí)候釋放占用的熱鍵,如果前面注冊(cè)失敗的話,則會(huì)出現(xiàn)釋放失敗的結(jié)果。
Private Sub Form1_Closed(ByVal sender As Object, ByVal e As System.EventArgs) Handles MyBase.Closed
Dim isResult As Boolean
isResult=UnRegisterHotKey(Handle, 0)
End Sub
雙擊打開指定的程序
Private Sub Label1_DoubleClick(ByVal sender As Object, ByVal e As System.EventArgs) Handles Label1.DoubleClick
System.Diagnostics.Process.Start("C:\WINDOWS\system32\freecell.exe")
End Sub
System.Diagnostics.Process.Start("路徑")打開指定程序
先列出這些吧