|
論壇說明 |
歡迎您來到『史萊姆論壇』 ^___^ 您目前正以訪客的身份瀏覽本論壇,訪客所擁有的權限將受到限制,您可以瀏覽本論壇大部份的版區與文章,但您將無法參與任何討論或是使用私人訊息與其他會員交流。若您希望擁有完整的使用權限,請註冊成為我們的一份子,註冊的程序十分簡單、快速,而且最重要的是--註冊是完全免費的! 請點擊這裡:『註冊成為我們的一份子!』 |
|
主題工具 | 顯示模式 |
2006-01-08, 02:26 AM | #1 |
長老會員
|
VB中的MDIForm的問題
<1>不知道為什麼在有 PopMenu的 MDIChild 表單一出現...
MDIForm上的Menu就會不見!!有沒有可能讓兩者並存!! <2>功能表編輯如下 A ...A1 ...A2 B ...B1 ...B2 有沒有辦法得知 A1 是 屬於 A 階層下,而 B2 是屬於 B 階層下?? (PS:最好是不要以名稱來判斷,目前雖然是採取這樣的命名方式, 但若是以後也要這樣命名是有點小麻煩的事) |
__________________ 一切有為法 如夢幻泡影 如露亦如電 應作如是觀 |
|
送花文章: 150,
|
2006-01-08, 10:32 AM | #2 (permalink) |
管理版主
|
首先1 裡提到的 PopMenu 不知是用什麼方式做出來的
至於2 不知什麼情況下有必要知道 "A1 是 屬於 A 階層下" 每一個選項都是獨立功能,不解為何須知道 "A1 是否來至於 A下階層" 原本的命名方式本身就是良好的方式 mnuFile ....mnuFileNew ....mnuFileOpen mnuEdit ....mnuEditCut ....mnuEditPaste 當 mnuEditPaste 程式碼出現時很容易了解是出至於 mnuEdit 先按了 mnuEdit 再選 mnuEditPaste |
送花文章: 2027,
|
2006-01-08, 11:08 AM | #3 (permalink) | |
長老會員
|
引用:
一、第一個問題 小弟的 PopMenu 是由 MDIChild(子表單)中 按滑鼠右鍵 功能表編輯器 程式碼則是 PopupMenu xxxxx(xxxxx 是要顯示的 功能表的名稱) 這樣做出來的下列 <1>及<2>兩種方式,結果均會出現同樣的問題! <1> mnu_PopUp ===> 不顯示 ...mnu_A ==> 顯示 ......mnu_A_1 ==> 顯示 ......mnu_A_2 ==> 顯示 ...mnu_B ==> 顯示 ......mnu_B_1 ==> 顯示 ......mnu_B_2 ==> 顯示 <2> ...mnu_A ===> 不顯示 ......mnu_A_1 ==> 顯示 ......mnu_A_2 ==> 顯示 ...mnu_B ===> 不顯示 ......mnu_B_1 ==> 顯示 ......mnu_B_2 ==> 顯示 二、第二個問題 小弟是因為要(依登入的使用者)控制功能表的變換顯示 才想要知道的,因為若是 A 階層下有顯示,那附屬在 A 功能表的子功能就不能全部不顯示,因為 MDI 不允許顯示中的功能表沒有子功能表,所以小弟就在每個 階層中 增加一個 Empty,當 A 顯示中,且下層的功能表都不顯示時,則 顯示 Empty A ...A1 ...A2 ...Empty |
|
送花文章: 150,
|
2006-01-09, 11:53 PM | #5 (permalink) | |
長老會員
|
引用:
劣者現在剩下這個問題,而第二個問題就依 mini 版主所回答的命名方式處理!! <1>不知道為什麼在有 PopMenu 的 MDIChild 表單一出現... MDIForm上的Menu就會不見!!有沒有可能讓兩者並存!! (拍寫之前寫錯了, 把”有 PopMenu 的 MDIChild 表單”(正確) 寫成 ”MDIChild 的 PopMenu ”(錯誤) 劣者把它分成四篇把完整程式碼貼出(其實也不是真正的,是 Sample 而己,真正的程式碼太多了,太亂了!) <1> MDIForm 第2 ∼ 4篇則是 MDIChild Form <2>Form1 ==> 沒有內含 功能表(PopupMenu) ==> 執行結果正常 <3>Form2 ==> 有 內含 功能表(PopupMenu) ==> 執行結果異常 <4>Form3 ==> 有 內含 功能表(PopupMenu) ==> 執行結果異常 <2> 只對屬性做了二個設定 MdiFormChild = True WindowState = 2 <3><4>都同 <2> ,只是比 <2>多了 功能表 (<3>,<4>的功能表 有點小差異,差異則是如下) Form2 快選功能表 ...刪除 ......刪除單筆 ......刪除全部 Form3 刪除 ...刪除單筆 ...刪除全部 <<MDIForm.frm>> VERSION 5.00 Begin VB.MDIForm MDIForm1 BackColor = &H8000000C& Caption = "MDIForm1" ClientHeight = 3195 ClientLeft = 165 ClientTop = 735 ClientWidth = 4680 LinkTopic = "MDIForm1" StartUpPosition = 3 '系統預設值 WindowState = 2 '最大化 Begin VB.Menu mnu_X_1 Caption = "[ 權限管理 ]" Begin VB.Menu mnu_1_1 Caption = "沒有Popupmenu" End Begin VB.Menu mnu_1_2 Caption = "Popupmenu1" End Begin VB.Menu mnu_1_3 Caption = "Popupmenu2" End Begin VB.Menu mnu_Project_Manage_UserDataCreate Caption = "使用者 基本資料建立" Visible = 0 'False End Begin VB.Menu mnu_Project_Manage_GroupDataCreate Caption = "群組 基本資料建立" Visible = 0 'False End End End Attribute VB_Name = "MDIForm1" Attribute VB_GlobalNameSpace = False Attribute VB_Creatable = False Attribute VB_PredeclaredId = True Attribute VB_Exposed = False Option Explicit Private Sub mnu_1_1_Click() Form1.Show End Sub Private Sub mnu_1_2_Click() Form2.Show End Sub Private Sub mnu_1_3_Click() Form3.Show End Sub |
|
送花文章: 150,
|
2006-01-09, 11:56 PM | #6 (permalink) |
長老會員
|
<<Form1>>
VERSION 5.00 Begin VB.Form Form1 Caption = "Form1" ClientHeight = 3195 ClientLeft = 60 ClientTop = 345 ClientWidth = 4680 LinkTopic = "Form1" MDIChild = -1 'True ScaleHeight = 3195 ScaleWidth = 4680 WindowState = 2 '最大化 End Attribute VB_Name = "Form1" Attribute VB_GlobalNameSpace = False Attribute VB_Creatable = False Attribute VB_PredeclaredId = True Attribute VB_Exposed = False |
送花文章: 150,
|
2006-01-10, 12:03 AM | #7 (permalink) |
長老會員
|
<<Form2>>
VERSION 5.00 Begin VB.Form Form2 Caption = "Form2" ClientHeight = 3195 ClientLeft = 60 ClientTop = 345 ClientWidth = 4680 LinkTopic = "Form2" MDIChild = -1 'True ScaleHeight = 3195 ScaleWidth = 4680 WindowState = 2 '最大化 Begin VB.Menu mnu_PopUp Caption = "快選功能表" Visible = 0 'False Begin VB.Menu mnu_Delete Caption = "刪除" Begin VB.Menu mnu_Delete_1 Caption = "刪除單筆" End Begin VB.Menu mnu_Delete_All Caption = "刪除全部" End End End End Attribute VB_Name = "Form2" Attribute VB_GlobalNameSpace = False Attribute VB_Creatable = False Attribute VB_PredeclaredId = True Attribute VB_Exposed = False Option Explicit Private Sub Form_MouseDown(Button As Integer, Shift As Integer, X As Single, Y As Single) PopupMenu mnu_Delete End Sub |
送花文章: 150,
|
2006-01-10, 12:07 AM | #8 (permalink) |
長老會員
|
<<Form3>>
VERSION 5.00 Begin VB.Form Form3 Caption = "Form3" ClientHeight = 3195 ClientLeft = 60 ClientTop = 345 ClientWidth = 4680 LinkTopic = "Form2" MDIChild = -1 'True ScaleHeight = 3195 ScaleWidth = 4680 WindowState = 2 '最大化 Begin VB.Menu mnu_Delete Caption = "刪除" Visible = 0 'False Begin VB.Menu mnu_Delete_1 Caption = "刪除單筆" End Begin VB.Menu mnu_Delete_All Caption = "刪除全部" End End End Attribute VB_Name = "Form3" Attribute VB_GlobalNameSpace = False Attribute VB_Creatable = False Attribute VB_PredeclaredId = True Attribute VB_Exposed = False Option Explicit Private Sub Form_MouseDown(Button As Integer, Shift As Integer, X As Single, Y As Single) PopupMenu mnu_Delete End Sub |
送花文章: 150,
|
2006-01-10, 11:12 AM | #9 (permalink) |
管理版主
|
試了一下
http://d.turboupload.com/d/267905/MDIForm_test.rar.html 也就是將表單統一編輯在 MDIForm1 裡 (其他的Form2及Form3裡的選單請刪除) 並將底層屬性改成 "不顯示" 就可以 PopupMenu MDIForm1.xxx 'xxx是該 "不顯示"的選單底層名稱 方式在各 Form裡使用 是否有更好的方法,有空再看看google可否找到... |
送花文章: 2027,
|
2006-01-10, 06:25 PM | #10 (permalink) | |
長老會員
|
引用:
您提到的那個問題(直接 Popup 第二階Menu),小弟先前也有發現,後來好像用了個人試出來的偏方( Private Sub Form_MouseDown(Button As Integer, Shift As Integer, x As Single, y As Single) If Button = vbRightButton Then ' ◎這裡不知道算不算是 VB 的 Bug ' 在其它地方,被引用過 子功能表(PopupMenu mnu_Order),且被顯示過一次 ' 這裡的 就會減少了 那個 子功能表 的顯示 (也就是 子功能表.Visible = False) mnu_Order.Visible = True mnu_Find.Visible = True PopupMenu mnu_PopUp End If End Sub )把它重新顯示處理 應該是小弟一開始的使用的方式就錯誤了,Trace 比較了好久才發現是 Popupmenu 造成的問題,但還是不知道原因,現在卻已經可以順利獲得解決,感謝 mini 版主!! 若還有好方式,還請版主 or 各位高手不吝賜教! 劣者若是找到好方式,也會把它 回在此篇!! |
|
送花文章: 150,
|
2006-01-10, 07:59 PM | #11 (permalink) | |
管理版主
|
引用:
感謝 原來只要把第二層以後的子選單 都 .Visible = True 一次 就可解決了 個人除錯追蹤一上午都找不出方法呢 ? ^^|| (還心想有mnu_PopUp 是否有 反事件 方法可用呢...哈) |
|
送花文章: 2027,
|
2006-01-12, 12:31 PM | #12 (permalink) |
長老會員
|
後來劣者翻了一下書(王國榮的實戰講座)
書上有寫 MDIForm的特性 4.有關功能表部分,在設計階段,MDI 表單及子表單可以各自設計自己的功能表, 但進入執行階段時,則不管是 MDI 表單或是子表單的功能表,一律顯示在 MDI 表單上面。 當 MDI 表單之中沒有子表單被開啟時,MDI 表單所顯示的是 MDI 表單的功能表, 但如果 MDI 表單之中已有子表單被開啟,則顯示的是「使用中」子表單的功能表。 劣者用版主教的方式(功能表統一編在 MDIForm),修改在實際的案例上, 又遇到新的問題了,就是Popupmenu MDIForm1.A時,嘿嘿,只給偶出現 A2 Popupmenu MDIForm1.B 時,也只給偶出現 B2,試了所有的Popupmenu ,都出現最後一個 子功能,真是見鬼了!! 不過實際的MDIForm的表單組成太複雜了,等劣者釐清問題 or 找到答案再來 post |
送花文章: 150,
|
2006-01-12, 02:53 PM | #13 (permalink) |
管理版主
|
不太了解您的新問題
至於 "原來只要把第二層以後的子選單 都 .Visible = True 一次 就可解決了" 發現其實 不用每個子選單 都 .Visible = True 一次 只要針對第一個子選單做一次就可以了 而且只需針對 使用最上層選單之情況才要這麼做 如圖 http://www.uploadtemple.com/view.php/1137048678.jpg |
送花文章: 2027,
|
2006-01-13, 02:39 PM | #14 (permalink) |
長老會員
|
mini 版主 拍寫喔,失禮!!
那個新問題,是偶自己豬頭造成的問題, 因為劣者有一個Module 依登入者來 控制MDIForm 功能表的顯示 又依版主的建議把 原MDIChild 表單的快選功能表 放到 MDIForm 了 但沒注意到這樣它(原先的快選功能表)也一併被 上述 module 控制顯示與否!! (因為一下子也無法釐清問題的所在,也花了一點時間在找問題點,讓版主費神真過意不去) 再次感謝版主的熱心解答!! (版主真是太用心了,您提供那個範例真是不簡單!!把後續衍生的問題都一併處理掉了,佩服,佩服!!) |
送花文章: 150,
|