2012-07-08 18 views
5

Daha önce C# kullanıcısı olan yeni bir iş için VB.net'i öğrenmek zorundayım. Ben sadece VB.net'in ilginç bir özelliği ile karşılaşıyorum. Sahte olmayan bir ikinci formdaki nesnelere başvurabilirim! Bunun nasıl çalıştığını herkes açıklayabilirbb.net'deki taklidi referanslı nesneler

Dim txt As String = Form2.TextBox1.Text 

şöyle

Yani Form1 'ı Form2 üzerinde Metinkutusu1 text özelliğini alabilirim? Programın başlangıcında tüm formlar tasnif ediliyor mu ve görünürlükleri program ömrü boyunca mı değiştiriliyor?

+0

olası kopyası [VB.Net'te varsayılan bir form örneği var ancak C#, NEDEN değil?] (Http://stackoverflow.com/questions/4698538/there-is-a-default-instance-of -form-in-vb-net-ama-değil-c-neden) –

cevap

6

VB'deki formlar özel bir durumdur. Derleyici, My ad alanının My.Forms object formlarında çok yazılan bir form listesi oluşturur. Her form bir özellik My.Forms.TheNameOfTheForm olarak açığa çıkar. Bu özellikler her zaman geçerli örnekleri döndürür. Örneğin, bir form daha önce oluşturulmamışsa, mülkünü ilk kullandığınızda bu olur.

Şimdiye kadar çok iyi.

Ama Microsoft ayrıca varsayılan olarak My.Forms nesneden özelliklerini ithal beyin ölümü (!) Kararı, her yerde, ve yapabileceğiniz hiçbir şey yok. Yüzeysel olarak, bu geriye dönük uyumluluk nedenleri VB6 için ama VB7 (.NET 1.0) bu özelliğe sahip olmadığı için bu saçmalık, sadece daha sonra geldi.

Ama sadece netleştirmek için:

programın başlangıcında instatiated tüm formlar ... musunuz?

Hayır, neyse ki değil. Bu mülklere ilk kez eriştiğinizde bunlar ortaya çıkar.

+0

+ 1. Ancak Microsoft **, VB6 ile geriye dönük uyumluluk için özellik ekledi. İlk VB.Net'ten bunu kaçırdılar, ancak geriye dönük uyumluluğu artırmak için sonraki birkaç sürümde daha fazla özellik eklediler. – MarkJ

+0

Ayrıca, referansı hiçbir şey yapmadan ayarladıktan sonra bile, bir özelliği referansladığınızda formun otomatik olarak yeniden kurulacağını da not etmeye değer. – MarkJ

+0

Bu, VB6'dan dönüştürmeyi çok kolaylaştırır, ancak programcıdan bu özelliği yanlışlıkla kullanmamaya özen gösterir. –