• Vui lòng đọc nội qui diễn đàn để tránh bị xóa bài viết
  • Tìm kiếm trước khi đặt câu hỏi

[Net] Lập trình ứng dụng giao diện MDI với VB.Net

Các bài viết hướng dẫn về Visual Basic .NET và C#

Điều hành viên: tungcan5diop, QUANITGROBEST

Hình đại diện của người dùng
anhtuyenbk
Guru
Guru
Bài viết: 1311
Ngày tham gia: T.Năm 22/09/2005 4:12 pm
Đến từ: Một nơi chừa từng biết, chưa từng nghe, chưa từng thấy
Been thanked: 38 time

[Net] Lập trình ứng dụng giao diện MDI với VB.Net

Gửi bàigửi bởi anhtuyenbk » CN 04/05/2008 10:10 pm

Tên bài viết: Lập trình ứng dụng giao diện MDI với VB.Net
Tác giả: Nguyễn Anh Tuyên
Cấp độ bài viết: Nâng cao
Tóm tắt: Lập trình ứng dụng giao diện MDI với VB.Net


Lập trình ứng dụng giao diện MDI với VB.Net

Chắc chắn rằng các bạn đang thắc mắc MDI là gì phải ko? MDI hiểu đơn giản là ứng dụng của bạn sẽ bao gồm 1 form cha (cha của tất cả các form) và tất cả các form con nằm bên trong form cha (và di chuyển theo form cha).
1. Tạo một Form Parent cho ứng dụng MDI
- Bạn tạo một project Window Application lấy tên là MDI Project.
- Add 1 form lấy tên là frmMain.
- Thiết lập thuộc tính IsMdiContainer của frmMain = True, lúc này Form của bạn sẽ có hình dạng
sau.
Hình 1

Hình ảnh

2. Tạo ra Form con cho ứng dụng MDI
- Add thêm 1 form vào project và lấy tên là frmChild.
- Add một MenuStrip vào frmMain (Form cha) lấy tên là MenuStrip1
- Trên MenuStrip này add vào một MenuItem tên là New như hình 1. Menu New này có chức năng này sẽ tạo ra một form con trong frmMain.
Hình 2

Hình ảnh

Hình 3

Hình ảnh

3. Viết code cho MenuNew

Mã: Chọn hết

  1. Dim i As Integer = 0
  2.     Private Sub NewToolStripMenuItem_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles NewToolStripMenuItem.Click
  3.         i = i + 1 'Chỉ số của Form
  4.         Dim frm As New frmChild 'Tạo ra một form con mới
  5.         frm.Name = "frmChild" & i 'Thiết lập tên mới cho form con
  6.         frm.Text = "Child Form " & i 'Thiết lập Title mới cho Form con
  7.         frm.MdiParent = Me
  8.         frm.Show()
  9.     End Sub

Hình 4 - Kết quả khi nhấn nút New
Hình ảnh
Sửa lần cuối bởi anhtuyenbk vào ngày T.Hai 05/05/2008 10:33 am với 1 lần sửa.


Kiếm cơm cho qua ngày tháng
https://www.facebook.com/pinduphongpisenchinhhang

Hình đại diện của người dùng
anhtuyenbk
Guru
Guru
Bài viết: 1311
Ngày tham gia: T.Năm 22/09/2005 4:12 pm
Đến từ: Một nơi chừa từng biết, chưa từng nghe, chưa từng thấy
Been thanked: 38 time

Re: [Net]***Lập trình ứng dụng giao diện MDI với VB.Net***

Gửi bàigửi bởi anhtuyenbk » T.Hai 05/05/2008 10:33 am

4. Hiển thị danh sách tên của cac cửa sổ con
- Add thêm một MenuItem lên MenuStrip1 của frmMain lấy tên là Window menu.
- Thiết lập thuộc tính MdiWindowListItem của MenuStrip1 là menu Window vừa mới tạo.
Hình 5
Hình ảnh
Bây giờ hãy chạy lại chương trình, nhấn New để tạo ra nhiều form con thử xem, bạn sẽ có kết quả sau
Hình 6
Hình ảnh

Menu này rất quan trọng, nó giúp bạn chuyển đổi qua lại giữa các cửa sổ con một cách nhanh chóng.
- Cửa sổ nào được chọn sẽ hiển thị lên trên hết.
- Khi bạn đóng cửa sổ nào đó lại , thì tên nó cũng sẽ mất đi trong menu Window.
5. Các thuộc tính chính được sử dụng với MDI
Các bạn lưu ý rằng tất cả các thuộc tính hay method dưới đây đều có trong lớp Form, mình chỉ phân chia ra theo tình huống sử dụng thôi
5.1 Form Parent
Thuộc tính
Me.ActiveMdiChild : trả về đối tượng Form con đang active
Me.MdiChildren : trả về một mảng các Form con của Form Parent
Me.IsMdiContainer : kiểm tra xem mình có phải là Form Parent hay ko
Method
Me.ActivateMdiChild(Form cần kích hoạt) : kích hoạt một form con
Me.LayoutMdi(MdiLayout.Cascade) : sắp xếp vị trí hiển thị các cửa sổ con, có 4 kiểu tất cả, bạn tìm trong cửa sổ code bung sẽ thấy.
5.2 Form Child
Frm con.MdiParent : đọc hoặc gán Form Parent cho nó.
Frm con.IsMdiChild : kiểmtra xem mình có phải là Form con hay ko
6. Tương tác giữa Form Parent và Form con
- Trong Form con các bạn tạo ra một Textbox lấy tên là TextBox1. Thiết lập thuộc tính Modifiers của nó là Public.
- Trong frmMain các bạn tạo một MenuItem mới trên MenuStrip1 lấy tên là Chèn tên.
Viết code cho menu Chèn tên

Mã: Chọn hết

  1. Private Sub ChènTênToolStripMenuItem_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles ChènTênToolStripMenuItem.Click
  2.         'Xác định Form con đang active
  3.         Dim frm As frmChild = Me.ActiveMdiChild
  4.         'Chèn Name và Title của Form con vào trong Textbox trên Form con
  5.         frm.TextBox1.Text = "Name : " & frm.Name & vbCrLf & "Title : " & frm.Text
  6.     End Sub

Hình 7

Hình ảnh
Bài viết đến đây là hết, chúc các bạnt thành công.
Kiếm cơm cho qua ngày tháng
https://www.facebook.com/pinduphongpisenchinhhang

Hình đại diện của người dùng
tieurongtien
Thành viên năng nổ
Thành viên năng nổ
Bài viết: 79
Ngày tham gia: T.Tư 26/03/2008 7:56 pm
Đến từ: Nơi mà ai-cũng-biết-là-nơi-nào-đó
Liên hệ:

Re: [Net]***Lập trình ứng dụng giao diện MDI với VB.Net***

Gửi bàigửi bởi tieurongtien » T.Hai 05/05/2008 6:50 pm

Cho em hỏi có cách nào làm đổi màu nền cái form chính không? Chứ em không thích màu xám lắm
Đừng xấu hổ khi không biết, chỉ xấu hổ khi không học

Hình đại diện của người dùng
anhtuyenbk
Guru
Guru
Bài viết: 1311
Ngày tham gia: T.Năm 22/09/2005 4:12 pm
Đến từ: Một nơi chừa từng biết, chưa từng nghe, chưa từng thấy
Been thanked: 38 time

Re: [Net]***Lập trình ứng dụng giao diện MDI với VB.Net***

Gửi bàigửi bởi anhtuyenbk » T.Hai 05/05/2008 7:00 pm

Rất tiếc không đổi được.
Kiếm cơm cho qua ngày tháng
https://www.facebook.com/pinduphongpisenchinhhang

daitn
Thành viên chính thức
Thành viên chính thức
Bài viết: 14
Ngày tham gia: T.Sáu 09/05/2008 10:26 am

Re: [Net]***Lập trình ứng dụng giao diện MDI với VB.Net***

Gửi bàigửi bởi daitn » T.Năm 12/06/2008 12:53 pm

anhtuyenbk đã viết:Rất tiếc không đổi được.

Có thể đổi được, tìm hiểu kỹ lại xem, màu nền hình như là Backgroundcolor thì phải, có thể không chính xác lắm vì hiện tại mình đang ở ngoài hàng NET, để về kiểm tra lại rồi nói tiếp.

neverland87
Guru
Guru
Bài viết: 490
Ngày tham gia: T.Bảy 26/05/2007 4:31 pm
Been thanked: 8 time

Re: [Net]***Lập trình ứng dụng giao diện MDI với VB.Net***

Gửi bàigửi bởi neverland87 » T.Năm 12/06/2008 12:58 pm

daitn đã viết:
anhtuyenbk đã viết:Rất tiếc không đổi được.

Có thể đổi được, tìm hiểu kỹ lại xem, màu nền hình như là Backgroundcolor thì phải, có thể không chính xác lắm vì hiện tại mình đang ở ngoài hàng NET, để về kiểm tra lại rồi nói tiếp.

Rất tiếc là không đổi được, mình đã thử thiết lập BackgroundColor. Thậm chí, chơi ăn gian như thế này:

Mã: Chọn hết

  1. private void Form1_Paint(object sender, PaintEventArgs e)
  2.         {
  3.             Graphics g = e.Graphics;
  4.             g.FillRectangle(Brushes.Yellow, this.ClientRectangle);
  5.         }
SIMPLY THE BEST - ĐƠN GIẢN LÀ TỐT NHẤT

Hình đại diện của người dùng
anhtuyenbk
Guru
Guru
Bài viết: 1311
Ngày tham gia: T.Năm 22/09/2005 4:12 pm
Đến từ: Một nơi chừa từng biết, chưa từng nghe, chưa từng thấy
Been thanked: 38 time

Re: [Net]***Lập trình ứng dụng giao diện MDI với VB.Net***

Gửi bàigửi bởi anhtuyenbk » T.Năm 12/06/2008 3:13 pm

daitn đã viết:Có thể đổi được, tìm hiểu kỹ lại xem, màu nền hình như là Backgroundcolor thì phải, có thể không chính xác lắm vì hiện tại mình đang ở ngoài hàng NET, để về kiểm tra lại rồi nói tiếp.

Cái thuộc tính Backcolor ai mà chẳng biết >:) >:) và nó chỉ có tác dụng đối với Form bình thường thôi (ko phải MDI) :D
Kiếm cơm cho qua ngày tháng
https://www.facebook.com/pinduphongpisenchinhhang

Hình đại diện của người dùng
anhtuyenbk
Guru
Guru
Bài viết: 1311
Ngày tham gia: T.Năm 22/09/2005 4:12 pm
Đến từ: Một nơi chừa từng biết, chưa từng nghe, chưa từng thấy
Been thanked: 38 time

Re: [Net] Lập trình ứng dụng giao diện MDI với VB.Net

Gửi bàigửi bởi anhtuyenbk » T.Năm 12/06/2008 3:29 pm

Hiện tại muốn đổi màu nền của MDI thì mình có cách sau, gián tiếp thôi, chứ ko trực tiếp. :D :D
Nó overrides sự kiện paint của Form.

Mã: Chọn hết

  1. Protected Overrides Sub OnPaint(ByVal e As System.Windows.Forms.PaintEventArgs)
  2.         For Each c As Control In Me.Controls
  3.             If TypeOf c Is MdiClient Then
  4.                 c.BackColor = Color.Blue 'Màu nền mà bạn muốn
  5.             End If
  6.         Next
  7.         MyBase.OnPaint(e)
  8.     End Sub
Kiếm cơm cho qua ngày tháng
https://www.facebook.com/pinduphongpisenchinhhang

Lam Tieu Tuong
Thành viên tích cực
Thành viên tích cực
Bài viết: 195
Ngày tham gia: CN 30/03/2008 8:46 pm
Been thanked: 18 time

Re: [Net] Lập trình ứng dụng giao diện MDI với VB.Net

Gửi bàigửi bởi Lam Tieu Tuong » T.Sáu 13/06/2008 9:54 pm

# For Each c As Control In Me.Controls
# If TypeOf c Is MdiClient Then
# c.BackColor = Color.Blue 'Màu nền mà bạn muốn
# End If
# Next
Cho cái đoạn này vào FormLoad vẫn chạy được mà.

Hình đại diện của người dùng
anhtuyenbk
Guru
Guru
Bài viết: 1311
Ngày tham gia: T.Năm 22/09/2005 4:12 pm
Đến từ: Một nơi chừa từng biết, chưa từng nghe, chưa từng thấy
Been thanked: 38 time

Re: [Net] Lập trình ứng dụng giao diện MDI với VB.Net

Gửi bàigửi bởi anhtuyenbk » T.Sáu 13/06/2008 10:30 pm

Viết thế cho nó có vẻ hướng đối tượng và oách hơn. >:) >:)
Kiếm cơm cho qua ngày tháng
https://www.facebook.com/pinduphongpisenchinhhang

Hình đại diện của người dùng
hoangthu1974
Guru
Guru
Bài viết: 812
Ngày tham gia: T.Năm 09/03/2006 9:30 am
Đến từ: Hà Nội --> Tp. Hồ Chí Minh
Been thanked: 13 time
Liên hệ:

Re: [Net] Lập trình ứng dụng giao diện MDI với VB.Net

Gửi bàigửi bởi hoangthu1974 » T.Sáu 13/06/2008 11:06 pm

Sorry, hình như bài viết này không khả thi lắm. Chỉ cần New một Form và chọn là MDIForm, tự nó sẽ add hết menu (new, save, close, windows...) rồi. Việc thay đổi back ground bằng code cũng được hoặc preset cho form cũng có luôn.

Hình đại diện của người dùng
anhtuyenbk
Guru
Guru
Bài viết: 1311
Ngày tham gia: T.Năm 22/09/2005 4:12 pm
Đến từ: Một nơi chừa từng biết, chưa từng nghe, chưa từng thấy
Been thanked: 38 time

Re: [Net] Lập trình ứng dụng giao diện MDI với VB.Net

Gửi bàigửi bởi anhtuyenbk » T.Bảy 14/06/2008 8:43 am

Bài này mình tổng hợp từ Ebook Pro VB.Net. :D :D
Sorry, hình như bài viết này không khả thi lắm. Chỉ cần New một Form và chọn là MDIForm

Cái này là cái bài viết mình đang nói mà. :D :D
tự nó sẽ add hết menu (new, save, close, windows...) rồi

Cái này mình ko biết, mình có thấy nó tự add bao giờ đâu :) hay bạn đang nói tới cái menu Window List nhỉ
Việc thay đổi back ground bằng code cũng được hoặc preset cho form cũng có luôn.

Cái này mình và nhiều người đã test, gán trước thuộc tính Backgroundcolor cho MDI form ko được, tìm trên MSDN cũng nói thế , chỉ làm được bằng Code. :) :)
Kiếm cơm cho qua ngày tháng
https://www.facebook.com/pinduphongpisenchinhhang

daitn
Thành viên chính thức
Thành viên chính thức
Bài viết: 14
Ngày tham gia: T.Sáu 09/05/2008 10:26 am

Re: [Net] Lập trình ứng dụng giao diện MDI với VB.Net

Gửi bàigửi bởi daitn » T.Ba 17/06/2008 1:52 pm

Sau khi tìm hiểu kỹ lại thì được biết cái màu xám đó không thay đổi được
Nhưng đừng lo, mình có thể dùng mẹo để đổi màu cho nó, rất đơn giản
Cần chuẩn bị: Một hình BMP có màu mình thích kích thước nhỏ thôi(48x48) (32x32 cũng được)
Cái hình này có thể tạo ngay trong VB bằng cách Add Resource
Cách thức cũng đơn giản, ta chỉ cần cho BackgroundImage là cái hình đó là được
Nhưng chú ý là nhớ Set cái BackgroundImageLayout là Tile nhé

Me.BackgroundImage = ChangeColorMDI.My.Resources.Image1
Me.BackgroundImageLayout = ImageLayout.Tile

Nhưng thay vì ta dùng cách này tại sao không đưa một cái hình gì đó cho nó đẹp hơn là dùng màu sắc nhỉ
Bạn có thể cho nó thể hiện khung cảnh khác
Cái này thật ra là dùng hình nền thôi, nhưng nó đáp ứng được nhu cầu là đổi cái màu xám kia ;))
Tập tin đính kèm
ChangeColorMDI.rar
Thay đổi màu MDI(Dùng hình nền đó mà)
(8.85 KiB) Đã tải 572 lần

Hình đại diện của người dùng
clarkkent
Mạnh Thường Quân
Mạnh Thường Quân
Bài viết: 1641
Ngày tham gia: T.Tư 16/04/2008 11:25 am
Đến từ: Chợ Lách - Bến Tre
Been thanked: 31 time
Liên hệ:

Re: [Net] Lập trình ứng dụng giao diện MDI với VB.Net

Gửi bàigửi bởi clarkkent » T.Ba 17/06/2008 5:09 pm

Mình cũng có 1 cái thay đổi nền MDI, thấy cũng đơn giản, nhưng nhìn vô cũng chẳng hiểu cho lắm... :D
Tập tin đính kèm
MDIBackColor.rar
MDI Back Color
(47.52 KiB) Đã tải 671 lần
• Hôm bây: www.tinsoftware.com ^ ^
Cố gắng lên...

Hình đại diện của người dùng
hoangthu1974
Guru
Guru
Bài viết: 812
Ngày tham gia: T.Năm 09/03/2006 9:30 am
Đến từ: Hà Nội --> Tp. Hồ Chí Minh
Been thanked: 13 time
Liên hệ:

Re: [Net] Lập trình ứng dụng giao diện MDI với VB.Net

Gửi bàigửi bởi hoangthu1974 » T.Ba 17/06/2008 6:22 pm

anhtuyenbk đã viết:Cái này mình ko biết, mình có thấy nó tự add bao giờ đâu :) hay bạn đang nói tới cái menu Window List nhỉ

Chọn Add Windows Form --> MDI Parent Form
Chương trình sẽ tự add: StatusTrip, ToolTrip, MenuTrip, ToolTip
Trong thanh Menu add sẵn có menu File, Edit, View, Tools, Windows và Help.
Trong menu Windows, tự bắt giữ những Child Form.

Còn cái vụ BackColor thì đúng là không cho đổi. Chương trình của mình đổi được vì nó có một cái Panel được Anchor bốn phía. Sorry các bạn nhé. Trong cái Panel đó, chọn màu thích hợp là được.

Hình đại diện của người dùng
anhtuyenbk
Guru
Guru
Bài viết: 1311
Ngày tham gia: T.Năm 22/09/2005 4:12 pm
Đến từ: Một nơi chừa từng biết, chưa từng nghe, chưa từng thấy
Been thanked: 38 time

Re: [Net] Lập trình ứng dụng giao diện MDI với VB.Net

Gửi bàigửi bởi anhtuyenbk » T.Ba 17/06/2008 7:50 pm

Chọn Add Windows Form --> MDI Parent Form

Thì ra đây là mọt cái form MDI được làm sẵn của VB, còn mình thì tự tạo MDI (giúp hiểu ra nhiều điều):D :D
Còn cái vụ BackColor thì đúng là không cho đổi. Chương trình của mình đổi được vì nó có một cái Panel được Anchor bốn phía.

Còn cái này thì mình đã thử kết quả là cái Panel đó nằm đè lên và che các Form con--> ko sử dụng được.
Tập tin đính kèm
anh.JPG
Panel che các Form con
Kiếm cơm cho qua ngày tháng
https://www.facebook.com/pinduphongpisenchinhhang

daitn
Thành viên chính thức
Thành viên chính thức
Bài viết: 14
Ngày tham gia: T.Sáu 09/05/2008 10:26 am

Re: [Net] Lập trình ứng dụng giao diện MDI với VB.Net

Gửi bàigửi bởi daitn » T.Sáu 18/07/2008 9:41 am

clarkkent đã viết:Mình cũng có 1 cái thay đổi nền MDI, thấy cũng đơn giản, nhưng nhìn vô cũng chẳng hiểu cho lắm... :D

Cái này theo tui tìm và hiểu thì nó viết lại cái properti cái backcolor và tạo ra một cái form khác thừa kế lại cái form MDI đó, nó có thể đổi màu của MDI nhưng như vậy thì phải tốn thêm 1 cái form nữa :-?

Hình đại diện của người dùng
thuytrang2542000
Thành viên tích cực
Thành viên tích cực
Bài viết: 155
Ngày tham gia: T.Hai 21/04/2008 3:10 am
Đến từ: TP.HCM
Been thanked: 6 time

Re: [Net] Lập trình ứng dụng giao diện MDI với VB.Net

Gửi bàigửi bởi thuytrang2542000 » CN 03/08/2008 4:24 pm

T có 1 thắc mắc : do không thích cái background của form MDI nên T đã sử dụng 1 cái SplitContainer và thiết lập Dock=Fill và thêm treeview, listview lên cái split đó , nhưng khi gọi form child từ MDI thì form child lại không chịu hiện lên trên , nếu mà Dock khác Fill thì lại thấy nó :-? . Mọi người có ai có cách gì hay thì gợi ý cho T với nha
^^ Nhìn lên thì không bằng ai . Nhìn xuống thì hổng còn ai ngoài mình ^^

Hình đại diện của người dùng
anhtuyenbk
Guru
Guru
Bài viết: 1311
Ngày tham gia: T.Năm 22/09/2005 4:12 pm
Đến từ: Một nơi chừa từng biết, chưa từng nghe, chưa từng thấy
Been thanked: 38 time

Re: [Net] Lập trình ứng dụng giao diện MDI với VB.Net

Gửi bàigửi bởi anhtuyenbk » CN 03/08/2008 4:26 pm

thuytrang2542000 đã viết:T có 1 thắc mắc : do không thích cái background của form MDI nên T đã sử dụng 1 cái SplitContainer và thiết lập Dock=Fill và thêm treeview, listview lên cái split đó , nhưng khi gọi form child từ MDI thì form child lại không chịu hiện lên trên , nếu mà Dock khác Fill thì lại thấy nó :-? . Mọi người có ai có cách gì hay thì gợi ý cho T với nha

Rất tiếc chẳng có cách nào đâu, bất cứ control nào đặt lên MDI nó cũng sẽ che khuất cái form con.
Kiếm cơm cho qua ngày tháng
https://www.facebook.com/pinduphongpisenchinhhang

Hình đại diện của người dùng
thuytrang2542000
Thành viên tích cực
Thành viên tích cực
Bài viết: 155
Ngày tham gia: T.Hai 21/04/2008 3:10 am
Đến từ: TP.HCM
Been thanked: 6 time

Re: [Net] Lập trình ứng dụng giao diện MDI với VB.Net

Gửi bàigửi bởi thuytrang2542000 » T.Hai 11/08/2008 4:01 pm

vậy mình có cách nào gọi 1 form mà form đó không hiển thị dưới statusbar được không ? (che mắt người dùng :D )
^^ Nhìn lên thì không bằng ai . Nhìn xuống thì hổng còn ai ngoài mình ^^


Quay về “[.NET] Bài viết hướng dẫn”

Đang trực tuyến

Đang xem chuyên mục này: Không có thành viên nào trực tuyến.1 khách