2012-07-08 40 views
5

Xin chào, tôi đang học VB.net cho một công việc mới trước đây là một anh chàng C#. Tôi chỉ bắt gặp một tính năng thú vị của VB.net. Tôi có thể tham khảo các đối tượng trên một hình thức thứ hai mà đã không được instatiated!đối tượng không được tham chiếu trong vb.net

Vì vậy, từ Form1 tôi có thể có được tài sản văn bản của TextBox1 trên Form2 như sau

Dim txt As String = Form2.TextBox1.Text 

bất cứ ai có thể giải thích cách làm việc này? Tất cả các hình thức có được instatiated lúc bắt đầu của chương trình và sau đó khả năng hiển thị của họ là toggled trong suốt tuổi thọ của chương trình?

+0

có thể trùng lặp của [Có một trường hợp mặc định của biểu mẫu trong VB.Net nhưng không phải trong C#, TẠI SAO?] (Http://stackoverflow.com/questions/4698538/there-is-a-default-instance-of -form-in-vb-net-nhưng-not-in-c-why) –

Trả lời

6

Các biểu mẫu trong VB là trường hợp đặc biệt. Trình biên dịch tạo ra một danh sách các biểu mẫu được gõ mạnh mẽ trong My.Forms object của không gian tên My. Mỗi biểu mẫu được hiển thị dưới dạng thuộc tính My.Forms.TheNameOfTheForm. Các thuộc tính này luôn trả về các phiên bản hợp lệ - tức là nếu một biểu mẫu chưa được tạo trước đó, nó sẽ xuất hiện khi bạn sử dụng thuộc tính lần đầu tiên.

Cho đến nay, rất tốt.

Nhưng Microsoft cũng đã chết não (!) Quyết định nhập khẩu các thuộc tính từ các đối tượng My.Forms theo mặc định, ở khắp mọi nơi, và không có gì bạn có thể làm là. Bề ngoài, đây là lý do tương thích ngược với VB6 nhưng điều đó là vô nghĩa vì VB7 (.NET 1.0) không có tính năng này, nó chỉ đến sau.

Nhưng chỉ cần làm rõ:

Có phải tất cả các hình thức instatiated vào lúc bắt đầu của chương trình ...?

Không, may mắn là không. Chúng được khởi tạo ngay khi bạn truy cập vào tài sản.

+0

+1. Nhưng Microsoft ** đã làm ** thêm tính năng cho khả năng tương thích ngược với VB6. Họ đã bỏ lỡ nó từ VB.Net đầu tiên, nhưng họ đã thêm nhiều tính năng hơn trong vài phiên bản tiếp theo để tăng khả năng tương thích ngược. – MarkJ

+0

Cũng đáng lưu ý rằng biểu mẫu sẽ tự động tái kích hoạt khi bạn tham chiếu thuộc tính, ngay cả sau khi bạn đã đặt tham chiếu thành không có gì. – MarkJ

+0

Điều này làm cho chuyển đổi từ VB6 rất dễ dàng, nhưng chỉ cần chăm sóc thêm từ lập trình viên để không sử dụng tính năng này do nhầm lẫn. –

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