2009-10-20 33 views
6

Câu hỏi lạ, nhưng câu hỏi đó hơi khó hiểu. Trong những ngày cũ khi chúng tôi có Terminals và DOS, các ứng dụng thường chỉ có một "cửa sổ", và đó là một cửa sổ toàn màn hình. Khi mọi người chuyển sang chức năng, không có khái niệm về việc mở một cửa sổ mới, nhưng thay vào đó nội dung của cửa sổ chính bị ghi đè. Vì vậy, chỉ có một cửa sổ chính, nhưng nhiều màn hình được hiển thị trong đó.Triển khai nhiều màn hình trong một Ứng dụng

Làm thế nào để tạo ra một cái gì đó như thế trong một ứng dụng hiện đại, hoặc là WinForms hoặc WPF?

Dường như có hai phương pháp:

  • Có nhiều cửa sổ. Đây là cách tiếp cận thông thường và thường điều này có ý nghĩa để cho phép người dùng làm việc với nhiều cửa sổ cùng một lúc, nhưng điều này có thể không được yêu cầu/mong muốn. Sử dụng ShowDialog() thay vì Show() là cách thông thường để tạo ra Window Modal thứ hai.
  • Chỉ có một cửa sổ, nhưng với một TabControl trên đó. Ẩn các tab và chuyển đổi chúng theo lập trình. Điều này gần với hành vi "Một cửa sổ, nhiều màn hình", nhưng tự nhiên nó bị lộn xộn vì bạn có tất cả các điều khiển trong cùng một lớp Biểu mẫu (mặc dù người ta có thể lập luận rằng điều này buộc đặt tên đúng các điều khiển. các lớp học một phần và một .cs trên mỗi màn hình)

Tôi tự hỏi nếu có cách nào tốt hơn? Về cơ bản một cái gì đó nói rằng "Hãy nhìn xem, tôi không quan tâm về công cụ như phong cách biên giới/biểu tượng hoặc dải trình đơn chính. Tất cả tôi muốn là bạn làm cho màn hình này vào khu vực này". Kinda như ASP.net Master Pages, nơi các trang thực sự chỉ xác định nội dung được đưa vào Placeholders.

Có một số cơ chế thích hợp để làm điều gì đó như vậy không?

Hoặc có vấn đề gì với toàn bộ cách tiếp cận?

Trả lời

7

Một cách tiếp cận sẽ là triển khai từng màn hình dưới dạng điều khiển người dùng và tự động tải và dỡ các điều khiển này trong cửa sổ chính khi cần. Tôi đã sử dụng cách tiếp cận đó trong một ứng dụng di động cửa sổ và nó đã hoạt động khá tốt.

+1

+1; Tôi chỉ viết một biến thể của câu trả lời này. Bây giờ tôi không phải làm vậy! –

+0

Đó là một ý tưởng tuyệt vời, đặc biệt là vì Điều khiển Người dùng có thể được đặt trong các vùng chứa khác 8 như bảng điều khiển), điều này khiến cho việc quản lý không gây đau đớn. –

1

Tôi chưa nghe nói về một khuôn khổ cụ thể để thực hiện điều đó, nhưng tôi sẽ làm cho mỗi trang một UserControl, hoặc có thể là một lớp con của một điều khiển với logic hiển thị mong muốn. Tất cả các điều khiển trang này sẽ là thành viên của biểu mẫu và được thêm vào bộ sưu tập Điều khiển khi cần (hoặc nếu có quá nhiều người trong số chúng, được tạo khi cần). Họ sẽ có các thuộc tính như Dock = DockStyle.Fill được đặt trong khởi tạo. Khi thay đổi trang:

void ChangePage(object sender, EventArgs e) 
{ 
    Controls.Clear(); 
    Controls.Add(sender as Control); 
}
3

Xét bạn đề cập đến WPF, nó là đáng nói đến là Prism (khuôn khổ UI tổng hợp từ MPP) sẽ thực hiện điều đó sử dụng nhiều lần xem (UserControls) hoặc trong một điều khiển đơn (đối với tổng hợp chung giống nhau) hoặc nhiều bộ điều khiển (trên một số tập hợp).

Chế độ xem hoặc người trình bày có thể kích hoạt lệnh (hoặc phát sự kiện qua IEventAggregator) và bộ điều khiển điều hướng của bạn có thể phản hồi bằng cách thay đổi chế độ xem hiện tại được gán cho "vùng" phù hợp (bạn chỉ có thể có). Trong thực tế, mô hình vùng của Prism khá giống với mô hình MasterPage/Placeholder, vì vậy bạn có thể muốn xem xét nó.

Lăng kính cũng có thể bao gồm lịch sử điều hướng (lùi lại/chuyển tiếp) theo dõi, nhưng tôi đã không sử dụng nó nếu có.

1

Tôi làm việc như một nhà phát triển C# và tôi có thể cho bạn biết rằng từng bước tôi bắt đầu sử dụng UserControl cho nhiều màn hình (trang) ứng dụng. Tôi xây dựng lớp cơ sở của tôi cho một trang, tên là BasePage mở rộng UserControl và tôi mở rộng nó cho mỗi trang mà tôi cần (MainPage, SettingsPage, vv). Trong MainForm (dạng duy nhất của ứng dụng) tôi đã thêm một điều khiển BasePage (ví dụ như CurrentPage), nơi tôi có thể tải trang cần thiết. từ MainForm tôi gửi các sự kiện cần thiết tới CurrentPage. Tôi nghĩ đây là giải pháp tốt nhất cho loại ứng dụng này, nơi bạn cần nhiều biểu mẫu trong một biểu mẫu. Đây là cấu trúc mà tôi sử dụng cho tất cả các ứng dụng nhiều trang của mình.

Nếu bạn sử dụng điều khiển tab, bạn sẽ kết thúc việc nghẹt thở biểu mẫu của bạn với tất cả các điều khiển từ tất cả các tab được nạp cùng một lúc. Tôi thấy các dự án có hơn 10 tab, các ứng dụng rất phức tạp rất chậm và khó mã hóa.

Tôi hy vọng bạn sẽ tìm thấy câu trả lời này hữu ích!

Các vấn đề liên quan