Bir form üzerinde bir panel oluşturup Dock = Üst olarak ayarlayıp başka bir paneli bırakıp Dock = Dolgu ayarını yaparsanız, ilk paneli yok sayarak tüm formu doldurabilir. Sekme sırasını değiştirmek hiçbir şey yapmaz.
Bir form üzerinde bir panel oluşturup Dock = Üst olarak ayarlayıp başka bir paneli bırakıp Dock = Dolgu ayarını yaparsanız, ilk paneli yok sayarak tüm formu doldurabilir. Sekme sırasını değiştirmek hiçbir şey yapmaz.
Yanıtlar:
Yerleştirme düzeni , kardeş kontrollerinin sırasına bağlıdır . Kontroller "düğme yukarı" kenetlenir, böylece koleksiyondaki son kontrol önce kenetlenir . Yerleşik bir denetim yalnızca önceden yerleştirilmiş kardeşlerin düzenini dikkate alır. Bu nedenle, diğer sabitlenmiş denetimleri dikkate almasını istiyorsanız, Dock = Dolgu ile denetim, kardeş sırayla ilk (üstte) olmalıdır. İlk kontrol değilse, önceki kontroller üst üste binecektir.
Bu, kafa karıştırıcı olabilir, çünkü kardeş sırası görsel siparişle aynı değildir ve kardeş sırası her zaman tasarım görünümünden anlaşılamaz.
Belge anahat penceresi (Görünüm -> Diğer Pencereler -> Belge anahat) kontrol hiyerarşisi ve düzeni üzerinde yararlı bir ağaç görünümü verir ve kontrollerin kardeş sırasını değiştirmek için izin verir.
Aynı zamanda bağlam menüsünü kullanarak doğrudan tasarımda kardeş sırasını değiştirebilirsiniz -> Öne getir / Arkaya gönder, bu da kontrolü kardeşlerin ilk ya da sonuncusu olacak şekilde hareket ettirir. Gerçek menü mizanpaj modeline bağlı olduğundan bu menü etiketleri biraz kafa karıştırıcı olabilir.
Sabit konumlu kontrollerde, 2B konum kardeş sırasından bağımsızdır, ancak kontroller çakıştığında, siparişteki en erken kontrol "üstte" olur ve kardeşlerin bir kısmını daha sonra sırayla gizler. Bu bağlamda öne getir / Arkaya gönder mantıklı.
Akış veya tablo düzeni panellerinin içinde, oluşturma sırası denetimlerin görsel sırasını belirler. Çakışan kontrol yok. Yani öne getir / arkaya gönder gerçekten kontroller sırasında ilk veya son yapmak anlamına gelir.
O kadar kontrolü yerleştirecektir bir dolgu-demirledi kumanda üzerindeki "öne getir", yerleştirme hesaplandığı sipariş belirler beri demirledi düzende, önden arkaya doğru getirmek / gönderme daha kafa karıştırıcı olabilir ortasında ebeveynin , kenara yerleştirilmiş tüm kontrolleri dikkate alarak.
Dock = Fill ile panele sağ tıklayın ve 'Öne Getir'e tıklayın.
Bu, bu denetimin en son oluşturulmasını sağlar; bu, aynı kaptaki diğer denetimlerdeki Dock ayarlarını dikkate alır.
Bir başka, potansiyel olarak daha temiz seçenek TableLayout kontrolünü kullanmaktır. Üst rıhtımınız için istenen yükseklikte bir satır ve altınız için% 100'ü dolduracak başka bir satır ayarlayın. İçindeki her iki paneli de Doldur olarak ayarlayın, işiniz bitti.
(TableLayout alışmaya biraz zaman ayırıyor.)
Aynı sorunu yaşadım ve çözmeyi başardım. Diğerleri
ile bir konteyner DockStyle.Fill
varsa DockStyle ama Top ya da ne istersen olmalı.
Önemli olan, DockStyle.Fill
önce Control'lerde, sonra diğerlerinde denetimi eklemek .
Misal:
ComboBox cb = new ComboBox();
cb.Dock = DockStyle.Top;
GridView gv = new GridView();
gv.Dock = DockStyle.Fill;
Controls.Add(gv); // this is okay
Controls.Add(cb);
ama önce cb koyarsak
Controls.Add(cb);
Controls.Add(gv); // gv will overlap the combo box.
Kod içindeki öğelerin sırasını değiştirmek istemiyorsanız, Container.Controls.SetChildIndex () yöntemini kullanarak örneğin Form, Panel vb.
Misal:
//Container ------------------------------------
Panel Container = new Panel();
//Top-Docked Element ---------------------------
ButtonArea = new FlowLayoutPanel();
Container.Controls.Add(ButtonArea);
Container.Controls.SetChildIndex(ButtonArea, 1);
ButtonArea.Dock = DockStyle.Top;
//Fill-Docked Element --------------------------
box = new RichTextBox();
Container.Controls.Add(box);
Container.Controls.SetChildIndex(box, 0); //setting this to 0 does the trick
box.Dock = DockStyle.Fill;
JacquesB'in fikri belge taslağı ile ilgili vardı ama hiyerarşi sorunumu çözmedi. Denetimlerim hiyerarşik bir tarzda değildi ve aynı ebeveynle listelendiler.
Siparişi değiştirirseniz, görünmesini istediğiniz şekilde düzeltileceğini öğrendim.
Listenin altındaki denetimler, Belge Anahatları penceresindeki üstündeki denetimlerle çakışacaktır. Sizin durumunuzda, ilk panelin ikinci panelin altında olduğundan emin olursunuz.
İşte benim için işe yarayan bir numara ...
Üst öğeyi yerleştirin ve üste yerleştirin.
Bir Bölücü yerleştirin ve üstüne yerleştirin, ardından devre dışı bırakın (üstünü yeniden boyutlandırmak istemiyorsanız).
Ardından Fill nesnesini yerleştirin ve Docking'i Dolgu olarak ayarlayın. Nesne ayırıcının altında kalacaktır.
Ben de aynı sorunla karşılaştım. Mine, çalışma süresi boyunca menü şeridinin altına yeni / özel kontroller ekleyerek oldu. Sorun kenetlendiğinde, formun üstünden kenetlenmeye karar verdi ve menü şeridini tamamen görmezden geldi, bana sorarsanız çok sinir bozucu kontroller oldu. Bu, tasarım modunda değil, kodla dinamik olarak yapılması gerektiğinden, bu son derece sinir bozucu oldu. Bulduğum en basit yol, tasarım modu sırasında bir panel oluşturmak ve menü şeridinin altına yerleştirmektir. Oradan kontrolleri panele ekleyebilir / çıkarabilir ve çalışma süresi boyunca yerleştirebilirsiniz. Formunuzda gerçekten değişmesi gerekmeyen tüm kontrollerinizle uğraşmanıza gerek yok, gerçekten ne yapmanız gerektiğine bağlı olarak çok fazla çalışma.
object.dock = Fill
Panel.Controls.Add(object)
Bunun eski bir yazı olduğunu biliyorum ama yararlı bir şey keşfettim. Dinamik olarak oluşturulan kontrol (ler) için kardeş kontrol sırasını programlı olarak ayarlamak için aşağıdakileri yapabilirsiniz:
parentForm.Controls.SetChildIndex (myPanel, 0)
Benim durumumda, bunu bir Dock / Fill panelini formumdaki ilk kontrol olarak taşımak için yaptım, böylece Dock / Top (bir menü şeridi) olarak ayarlanmış başka bir yerleştirilmiş kontrol ile çakışmayacaktı.