2008-08-06 12 views
13

Tôi đang viết một ứng dụng về cơ bản chỉ là một hộp thoại tùy chọn, giống như hộp thoại tùy chọn xem cây mà chính Visual Studio sử dụng. Chức năng của ứng dụng chỉ đơn giản là một pass-through cho dữ liệu từ một thiết bị nối tiếp đến một tập tin. Nó thực hiện nhiều, nhiều phép biến đổi trên dữ liệu trước khi ghi nó vào tệp, vì vậy GUI cho ứng dụng đơn giản là tất cả các thiết lập chỉ ra những biến đổi đó là gì.Làm thế nào để tạo kiểu hộp thoại tùy chọn dạng xem của giao diện trong C#?

Cách tốt nhất để thiết kế/mã hóa hộp thoại tùy chọn chế độ xem dạng cây là gì? Cách tôi đã đi về nó là xây dựng cửa sổ chính với một điều khiển cây neo đậu ở bên trái. Sau đó, tôi đã tạo các điều khiển vùng chứa tương ứng với mỗi nút của cây. Khi một nút được chọn, ứng dụng sẽ đưa điều khiển vùng chứa tương ứng của nút đó về phía trước, di chuyển nó đến đúng vị trí và tối đa hóa nó trong cửa sổ chính. Điều này có vẻ thực sự, thực sự clunky trong khi thiết kế nó. Về cơ bản nó có nghĩa là tôi có rất nhiều điều khiển container ngoài mép của cửa sổ chính trong suốt thời gian thiết kế mà tôi phải tiếp tục cuộn cửa sổ chính sang để làm việc với chúng. Tôi không biết nếu điều này hoàn toàn có ý nghĩa cách tôi đang viết những dòng này, nhưng có lẽ đây thị giác cho những gì tôi đang nói về sẽ có ý nghĩa hơn:

form design

Về cơ bản tôi phải làm việc với điều này hình thức rất lớn, với các điều khiển container trên khắp nơi, và sau đó thực hiện một loạt các định dạng thời gian chạy để làm cho nó hoạt động. Điều này có vẻ giống như công việc bổ sung. Tôi đang làm điều này một cách hoàn toàn ngu ngốc? Có một số "rõ ràng" cách dễ dàng hơn để làm điều này mà tôi đang thiếu?

Trả lời

10

Một cách ngăn nắp là để tạo các biểu mẫu riêng cho từng 'cửa sổ', và trong mỗi phương thức dựng hình thức, thiết

this.TopLevel = false; 
this.FormBorderStyle = FormBorderStyle.None; 
this.Dock = DockStyle.Fill; 

Bằng cách đó, mỗi một trong các hình thức có thể được đặt ra trong thiết kế của riêng mình, khởi tạo một hoặc nhiều lần trong thời gian chạy và được thêm vào vùng trống như một điều khiển thông thường.

Có thể biểu mẫu chính có thể sử dụng SplitContainer với một số TreeView tĩnh trong một bảng và không gian để thêm các biểu mẫu này trong bảng khác. Khi chúng được thêm vào, chúng có thể được lật qua các phương pháp Hide/Show hoặc BringToFront/SendToBack.

SeparateForm f = new SeparateForm(); 
MainFormSplitContainer.Panel2.Controls.Add(f); 
f.Show(); 
2

Greg Hurlman đã viết:

Tại sao không chỉ hiển thị/ẩn container thích hợp khi một nút được chọn trong lưới? Có các thùng chứa tất cả có kích thước phù hợp trong cùng một vị trí và ẩn tất cả trừ giá trị mặc định, sẽ được chọn trước trong lưới khi tải.

Thật không may, đó là những gì tôi đang cố gắng tránh. Tôi đang tìm một cách dễ dàng để xử lý giao diện trong thời gian thiết kế, với mã định dạng tối thiểu cần thiết để làm cho nó hoạt động trong thời gian chạy.

Tôi thích câu trả lời của Duncan vì điều đó có nghĩa là thiết kế giao diện của mỗi nút có thể được giữ hoàn toàn riêng biệt. Điều này có nghĩa là tôi không bị trùng lặp trên các hướng dẫn chụp và các ưu điểm về thời gian thiết kế khác.

0

Tôi có thể tạo nhiều lớp bảng điều khiển dựa trên lớp cơ sở kế thừa CustomControl. Các điều khiển này sau đó sẽ có các phương thức như Lưu/Tải và các công cụ tương tự. Nếu vậy tôi có thể thiết kế riêng từng tấm này.

Tôi đã sử dụng điều khiển Thuật sĩ ở chế độ thiết kế, xử lý nhiều trang để có thể nhấp vào tiếp theo trong thiết kế và thiết kế tất cả các trang cùng lúc thông qua nhà thiết kế. Mặc dù điều này có một số nhược điểm khi kết nối mã với các điều khiển, nó có thể có nghĩa là bạn có thể có một thiết lập tương tự bằng cách xây dựng một số lớp thiết kế. Tôi chưa bao giờ tự viết bất kỳ lớp thiết kế nào trong VS, vì vậy tôi không thể nói cách hoặc giá trị của nó :-)

Tôi hơi tò mò về cách bạn định xử lý tải/lưu các giá trị vào/từ các điều khiển? Phải có nhiều mã trong một lớp nếu tất cả các trang của bạn ở trong một Biểu mẫu lớn?

Và một cách khác tất nhiên là tạo mã gui theo từng trang được yêu cầu, sử dụng thông tin về loại cài đặt có.

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