2015-09-26 13 views
5

Trong C# (và Visual Basic), bạn có thể thêm một số thành phần không phải giao diện người dùng (những thành phần không kế thừa từ System.Windows.Forms.Control) trực tiếp từ trình thiết kế biểu mẫu. Ví dụ về các thành phần đó là System.Windows.Forms.FolderBrowserDialogSystem.Windows.Forms.Timer.Tại sao tôi nên chèn một thành phần Windows.Forms không phải người dùng từ nhà thiết kế?

Nhưng lợi ích của việc thêm các điều khiển không phải giao diện người dùng bằng trình thiết kế giao diện người dùng thay vì trực tiếp hóa chúng từ mã là gì? Có một lý do đằng sau điều đó?

+0

InitializeComponent() có mã cho những thứ bạn vừa mới bỏ, nếu tôi hiểu chính xác bạn – brykneval

+0

@brykneval Tôi biết người thiết kế khai báo và khởi tạo thành phần ở đâu, nhưng tôi không hiểu lợi ích của việc sử dụng nhà thiết kế cho thành phần không phải giao diện người dùng. – Wizard79

+1

Bạn có thể kiểm tra xem đối tượng có triển khai 'IDisposable' hay không, liệu nhà thiết kế có thêm lệnh' Dispose() 'trong' Disposing (bool disposing) 'hay không. Hoặc làm một tìm tất cả các tài liệu tham khảo về tên biến và xem nếu có bất kỳ mã được thêm vào (bên cạnh hiển nhiên). – Loathing

Trả lời

6

Tôi nghĩ rằng sử dụng các thành phần phi UI trong nhà thiết kế ít nhất có những lợi ích sau:

Hỗ trợ thiết kế thời gian

Một trong những điều mạnh mẽ nhất mà bạn có trong cửa sổ hình thức là khả năng sử dụng được thiết kế riêng để thiết lập thành phần.
Mặc dù Timer không phải là thành phần giao diện người dùng nhưng bạn có thể đặt các thuộc tính của nó như khoảng thời gian thiết kế. Điều này áp dụng cho nhiều thành phần khác như BindingSource, ErrorProvider, ... mà bạn có thể sử dụng lưới thuộc tính rất thân thiện và trình chỉnh sửa loại và trình chuyển đổi loại để định cấu hình thuộc tính vào thời gian thiết kế.

  • Khi bạn muốn định cấu hình thuộc tính phụ thuộc cho các điều khiển khác; ví dụ bằng cách thêm BindingSource vào thiết kế, nó làm cho dữ liệu ràng buộc rất dễ dàng.
  • Khi bạn cần sử dụng các nhà cung cấp mở rộng như HelpProviderTooltip, vì chúng có liên quan đến các điều khiển khác, việc định cấu hình chúng ở chế độ thiết kế rất dễ dàng.
  • Khi bạn cần định cấu hình các thuộc tính như DataSourceDataMember, rất thân thiện khi sử dụng thiết kế và sử dụng các tính năng lưới lớn của thuộc tính.
  • Các thành phần sẽ thêm làm trường cấp lớp và bạn có thể đặt chúng ở chế độ công khai bằng cách sử dụng trình khử.
  • Khi bạn cần sử dụng tính năng Localizable của Form cho các thành phần của mình, tính năng này hoàn toàn khả dụng khi sử dụng thiết kế.
  • Khi bạn chỉ cần thêm hoặc xóa trình xử lý sự kiện, bạn có thể thực hiện việc đó bằng lưới thuộc tính.

Mã Chuẩn

Nếu bạn có một cái nhìn tại nhà thiết kế tạo ra mã bạn sẽ thấy:

  • tạo mã cho các thành phần hỗ trợ ISupportInitialize sử dụng mã BeginInitEndInit
  • tạo của họ đối với các thành phần, hãy chuyển this.components đến hàm tạo và sau đó sử dụng nó khi Dispose

Nếu bạn không cần hỗ trợ thiết kế thời gian và bạn viết mã tiêu chuẩn cho các thành phần, do đó, hoàn toàn OK để sử dụng chủ đề trong mã.

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