• 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#

Moderators: tungcan5diop, QUANITGROBEST

User avatar
anhtuyenbk
Guru
Guru
Posts: 1311
Joined: Thu 22/09/2005 4:12 pm
Location: Một nơi chừa từng biết, chưa từng nghe, chưa từng thấy
Been thanked: 38 times

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

Postby anhtuyenbk » Sun 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

Image

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

Image

Hình 3

Image

3. Viết code cho MenuNew

Code: Select all

  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
Image
Last edited by anhtuyenbk on Mon 05/05/2008 10:33 am, edited 1 time in total.


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

User avatar
anhtuyenbk
Guru
Guru
Posts: 1311
Joined: Thu 22/09/2005 4:12 pm
Location: Một nơi chừa từng biết, chưa từng nghe, chưa từng thấy
Been thanked: 38 times

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

Postby anhtuyenbk » Mon 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
Image
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
Image

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

Code: Select all

  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

Image
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

User avatar
tieurongtien
Thành viên năng nổ
Thành viên năng nổ
Posts: 78
Joined: Wed 26/03/2008 7:56 pm

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

Postby tieurongtien » Mon 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

User avatar
anhtuyenbk
Guru
Guru
Posts: 1311
Joined: Thu 22/09/2005 4:12 pm
Location: Một nơi chừa từng biết, chưa từng nghe, chưa từng thấy
Been thanked: 38 times

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

Postby anhtuyenbk » Mon 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
Posts: 14
Joined: Fri 09/05/2008 10:26 am

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

Postby daitn » Thu 12/06/2008 12:53 pm

anhtuyenbk wrote: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
Posts: 490
Joined: Sat 26/05/2007 4:31 pm
Been thanked: 8 times

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

Postby neverland87 » Thu 12/06/2008 12:58 pm

daitn wrote:
anhtuyenbk wrote: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:

Code: Select all

  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

User avatar
anhtuyenbk
Guru
Guru
Posts: 1311
Joined: Thu 22/09/2005 4:12 pm
Location: Một nơi chừa từng biết, chưa từng nghe, chưa từng thấy
Been thanked: 38 times

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

Postby anhtuyenbk » Thu 12/06/2008 3:13 pm

daitn wrote: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

User avatar
anhtuyenbk
Guru
Guru
Posts: 1311
Joined: Thu 22/09/2005 4:12 pm
Location: Một nơi chừa từng biết, chưa từng nghe, chưa từng thấy
Been thanked: 38 times

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

Postby anhtuyenbk » Thu 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.

Code: Select all

  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
Posts: 195
Joined: Sun 30/03/2008 8:46 pm
Been thanked: 18 times

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

Postby Lam Tieu Tuong » Fri 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à.

User avatar
anhtuyenbk
Guru
Guru
Posts: 1311
Joined: Thu 22/09/2005 4:12 pm
Location: Một nơi chừa từng biết, chưa từng nghe, chưa từng thấy
Been thanked: 38 times

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

Postby anhtuyenbk » Fri 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

User avatar
hoangthu1974
Guru
Guru
Posts: 813
Joined: Thu 09/03/2006 9:30 am
Location: Hà Nội --> Tp. Hồ Chí Minh
Been thanked: 13 times
Contact:

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

Postby hoangthu1974 » Fri 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.

User avatar
anhtuyenbk
Guru
Guru
Posts: 1311
Joined: Thu 22/09/2005 4:12 pm
Location: Một nơi chừa từng biết, chưa từng nghe, chưa từng thấy
Been thanked: 38 times

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

Postby anhtuyenbk » Sat 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
Posts: 14
Joined: Fri 09/05/2008 10:26 am

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

Postby daitn » Tue 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 ;))
Attachments
ChangeColorMDI.rar
Thay đổi màu MDI(Dùng hình nền đó mà)
(8.85 KiB) Downloaded 659 times

User avatar
clarkkent
Mạnh Thường Quân
Mạnh Thường Quân
Posts: 1641
Joined: Wed 16/04/2008 11:25 am
Location: Chợ Lách - Bến Tre
Been thanked: 31 times
Contact:

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

Postby clarkkent » Tue 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
Attachments
MDIBackColor.rar
MDI Back Color
(47.52 KiB) Downloaded 749 times
• Hôm bây: www.tinsoftware.com ^ ^
Cố gắng lên...

User avatar
hoangthu1974
Guru
Guru
Posts: 813
Joined: Thu 09/03/2006 9:30 am
Location: Hà Nội --> Tp. Hồ Chí Minh
Been thanked: 13 times
Contact:

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

Postby hoangthu1974 » Tue 17/06/2008 6:22 pm

anhtuyenbk wrote: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.

User avatar
anhtuyenbk
Guru
Guru
Posts: 1311
Joined: Thu 22/09/2005 4:12 pm
Location: Một nơi chừa từng biết, chưa từng nghe, chưa từng thấy
Been thanked: 38 times

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

Postby anhtuyenbk » Tue 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.
Attachments
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
Posts: 14
Joined: Fri 09/05/2008 10:26 am

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

Postby daitn » Fri 18/07/2008 9:41 am

clarkkent wrote: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 :-?

User avatar
thuytrang2542000
Thành viên tích cực
Thành viên tích cực
Posts: 155
Joined: Mon 21/04/2008 3:10 am
Location: TP.HCM
Been thanked: 6 times

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

Postby thuytrang2542000 » Sun 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 ^^

User avatar
anhtuyenbk
Guru
Guru
Posts: 1311
Joined: Thu 22/09/2005 4:12 pm
Location: Một nơi chừa từng biết, chưa từng nghe, chưa từng thấy
Been thanked: 38 times

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

Postby anhtuyenbk » Sun 03/08/2008 4:26 pm

thuytrang2542000 wrote: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

User avatar
thuytrang2542000
Thành viên tích cực
Thành viên tích cực
Posts: 155
Joined: Mon 21/04/2008 3:10 am
Location: TP.HCM
Been thanked: 6 times

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

Postby thuytrang2542000 » Mon 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 ^^


Return to “[.NET] Bài viết hướng dẫn”

Who is online

Users browsing this forum: No registered users and 1 guest