Phần 2: Thiết kế ứng dụng MDI Notepad trong C#



MDI (Multiple Document Interface) là kiểu giao diện người dùng (GUI – Graphic User Interface) trong đó có nhiều cửa sổ con được cư trú trong cửa sổ cha duy nhất, ngược lại với kiểu giao diện SDI (Single Document Interface) mà tất cả các cửa sổ là độc lập với nhau. Ví dụ Notepad của Windows là dạng giao diện SDI, Visual Studio là dạng giao diện MDI. Hôm nay chúng ta sẽ xây dựng chương trình giống như Notepad của Window nhưng dạng giao diện MDI, chúng ta đặt tên chương trình này là MDINotepad.

Giao diện MDI Notepad

Giao diện MDI Notepad


Nội dung


Tạo Menu, Toolbar và thanh Status

  • Menu là một thành phần không thể thiếu cho các ứng dụng, giúp người sử dụng có thể thao tác với các chức năng của chương trình. Thường thì các menu con có cùng tính năng sẽ nằm trong menu cha, ví dụ menu Save File, Open File sẽ nằm trong menu File hoặc các menu liên quan đến Edit như Undo, Redo, Copy, Paste, Cut sẽ nằm trong menu Edit. Trong VS chúng ta sẽ sử dụng control có tên MenuStrip để thiết kế Menu. Ngoài ra còn có ContextMenuStrip cho phép chúng ta thiết kế menu động, menu sẽ hiển thị khi ta kích chuột phải lên một phần nào đó của ứng dụng.
  • Toolbar là một thành phần không thể thiếu trong các ứng dụng, nó có các nút cho phép người sử dụng thao tác nhanh vào một chức năng nào đó của ứng dụng ví dụ như nút Save, nút Open trên thành Toolbar. Trong VS chúng ta sử dụng control ToolStrip.
  • Thanh Status là thanh nằm ở dưới cùng của cửa sổ, chức năng để hiển thị trạng thái của ứng dụng ví dụ như hiển thị hàng cột của con trỏ đang ở đâu trong cửa sổ soạn thảo hoặc hiển thị trạng thái xử lý của chương trình. Trong VS chúng ta sử dụng StatusStrip.

Xem hướng dẫn


Thiết lập Form cha, Form con

Trong phần này chúng ta sẽ tìm hiểu cách thiết lập Form cha và hiển thị các Form con nằm trong Form cha.

  • Để một Form trở thành form cha, ta đặt thuộc tính IsMdiContainer = True
  • Để một Form con nằm trong Form cha khi mở ta dùng dòng lệnh sau

frmNotepad frm = new frmNotepad();
frm.MdiParent = this;
frm.Show();

Xem hướng dẫn


Sử dụng Dialog chuẩn của Windows

Cửa sổ Dialog hay thường gọi là dạng “hộp thoại” là một cửa sổ nhỏ để giao tiếp thông tin với người dùng và gợi ý cho họ câu trả lời.
Trong Visual Studio đã tạo một số Control dạng hộp thoại chuẩn để người lập trình có thể sử dụng như OpenFileDialog để cho người sử dụng chọn file, SaveFileDialog cho hộp thoại lưu file …

  • OpenFileDialog: là hộp thoại chuẩn cho người dùng thực hiện mở file.
  • SaveFileDialog: là hộp thoại chuẩn cho người dùng thực hiện lưu file
  • ColorDialog: cho người dùng chọn màu sắc
  • FolderBrowserDialog: cho người dùng chọn thư mục.
  • FontDialog: cho người dùng chọn font chữ của hệ thống.

Xem hướng dẫn


Lập trình thao tác với tệp đơn giản

Chúng ta sẽ thực hiện việc mở một file Text đơn giản và hiển thị nội dụng của tệp lên trên cửa sổ con của MDINotepad. Có thể thực hiện thay đổi, cập nhật dữ liệu trên cửa sổ con rồi người sử dụng thực hiện việc ghi dữ liệu từ cửa sổ con ra tệp (.txt).
Bài toán đặt ra là có thể có nhiều cửa sổ con được mở trong cửa sổ chính, làm thế nào để có thể lưu được dữ liệu của một cửa sổ con đang được chọn (đang active)?
Trong ứng dụng MDI, chúng ta có thể lấy được cửa sổ con đang được active thông qua thuộc tính ActiveMdiChild của form cha.


frmChild frm = (frmChild)this.ActiveMdiChild;//Khai báo frm thuộc kiểu form con lấy form con đang được active và quản lý bởi form cha


Sắp xếp các cửa sổ Form con

Với giao diện MDI, người sử dụng có thể mở nhiều cửa sổ cùng một lúc, lúc đó có thể cửa sổ Form này bị che khuẩn cửa sổ Form khác. Chúng ta sẽ lập trình để sắp xếp lại các cửa sổ trong ứng dụng MDI.
Code sắp xếp các cửa sổ con trong cửa sổ cha:


this.LayoutMdi(MdiLayout.TileVertical);//Sắp xếp title theo chiều dọc
this.LayoutMdi(MdiLayout.TileHorizontal);//Sắp xếp title theo chiều ngang
this.LayoutMdi(MdiLayout.ArrangeIcons);//Sắp xếp theo Icon
this.LayoutMdi(MdiLayout.Cascade);//Sắp xếp cửa sổ con theo hình thác nước

Tham khảo thêm

Có thể bạn sẽ thích…

Trả lời

EnglishVietnamese