Jika Anda membuat panel pada formulir dan mengaturnya ke Dock = Top dan drop panel lain dan mengatur Dock = Isi, itu dapat mengisi seluruh formulir, mengabaikan panel pertama. Mengubah urutan tab tidak menghasilkan apa-apa.
Jika Anda membuat panel pada formulir dan mengaturnya ke Dock = Top dan drop panel lain dan mengatur Dock = Isi, itu dapat mengisi seluruh formulir, mengabaikan panel pertama. Mengubah urutan tab tidak menghasilkan apa-apa.
Jawaban:
Tata letak docking tergantung pada urutan kontrol saudara. Kontrol di-dock "tombol ke atas", jadi kontrol terakhir dalam koleksi di-dock terlebih dahulu . Kontrol berlabuh hanya memperhitungkan tata letak saudara yang sebelumnya berlabuh. Oleh karena itu kontrol dengan Dock = Isi harus menjadi yang pertama (atas) dalam urutan saudara, jika Anda ingin mengambil kontrol merapat lainnya ke akun. Jika ini bukan kontrol pertama, kontrol sebelumnya akan tumpang tindih.
Ini dapat membingungkan karena urutan saudara tidak selalu sama dengan urutan visual, dan urutan saudara tidak selalu terlihat dari tampilan desain.
The Document garis jendela (View -> Lain Windows -> Dokumen garis besar) memberikan berguna pohon-pandangan dari hirarki kontrol dan ketertiban, dan memungkinkan Anda untuk mengubah urutan saudara kontrol.
Anda juga dapat mengubah urutan saudara langsung di desainer dengan menu konteks -> Bawa ke depan / Kirim ke belakang, yang menggerakkan kontrol untuk menjadi saudara kandung pertama atau terakhir. Label menu ini mungkin agak membingungkan karena efek sebenarnya tergantung pada model tata letak.
Dengan kontrol yang diposisikan tetap, posisi 2D tidak tergantung pada urutan saudara, tetapi ketika kontrol tumpang tindih, kontrol yang paling awal dalam urutan akan "di atas", menyembunyikan bagian dari saudara kandung di kemudian dalam urutan. Dalam konteks ini Membawa ke depan / Kirim ke belakang masuk akal.
Di dalam panel tata letak aliran atau tabel, urutan kreasi menentukan urutan visual kontrol. Tidak ada kontrol yang tumpang tindih. Jadi bawa ke depan / kirim ke belakang benar-benar berarti membuat pertama atau terakhir dalam urutan kontrol.
Dengan tata letak berlabuh, bawa ke depan / kirim ke belakang mungkin lebih membingungkan karena menentukan urutan docking yang dihitung, jadi "bawa ke depan" pada kontrol pengisian berlabuh akan menempatkan kontrol di tengah - tengah induk , dengan mempertimbangkan semua kontrol edge-docked.
Klik kanan pada panel dengan Dock = Fill dan klik 'Bring to Front'.
Ini membuat kontrol ini dibuat terakhir, yang memperhitungkan pengaturan Dock pada kontrol lain dalam wadah yang sama.
Opsi lain yang berpotensi lebih bersih adalah dengan menggunakan kontrol TableLayout. Siapkan satu baris dari ketinggian yang diinginkan untuk dock atas Anda, dan baris lain untuk mengisi 100% untuk bottom Anda. Atur kedua panel di dalam untuk Isi, dan Anda selesai.
(TableLayout memang membutuhkan waktu untuk membiasakan diri.)
Saya memiliki masalah yang sama dan saya berhasil menyelesaikannya.
Jika Anda memiliki wadah dengan DockStyle.Fill
yang lain juga harus memiliki DockStyle tetapi Atas atau apa pun yang Anda inginkan.
Yang penting adalah menambahkan kontrol dengan yang DockStyle.Fill
pertama di Kontrol kemudian yang lain.
Contoh:
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);
tetapi jika kita mengutamakan cb
Controls.Add(cb);
Controls.Add(gv); // gv will overlap the combo box.
Jika Anda tidak ingin mengubah urutan elemen di dalam kode, Anda dapat menggunakan metode Container.Controls.SetChildIndex () dengan Container menjadi misalnya Formulir, Panel dll. Anda ingin menambahkan kontrol Anda.
Contoh:
//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 memiliki ide dengan garis besar dokumen tetapi hierarki tidak menyelesaikan masalah saya. Kontrol saya tidak dalam gaya hierarkis, mereka hanya terdaftar dengan orang tua yang sama.
Saya belajar bahwa jika Anda mengubah urutannya, itu akan memperbaiki tampilan yang Anda inginkan.
Kontrol di bagian bawah daftar akan tumpang tindih kontrol di atasnya di jendela Outline Dokumen. Dalam kasus Anda, Anda akan memastikan bahwa panel pertama di bawah panel kedua dan seterusnya.
Ini adalah trik yang bekerja untuk saya ..
Tempatkan item Top dan dok atas.
Tempatkan Splitter, dan juga letakkan di bagian atas, kemudian nonaktifkan (kecuali jika Anda ingin mengubah ukuran atas).
Kemudian Tempatkan objek Isi dan atur Docking ke Isi. Objek akan tetap di bawah splitter.
Saya mengalami masalah yang sama. Milik saya adalah dengan menambahkan kontrol baru / kustom di bawah strip menu selama waktu berjalan. Masalahnya adalah kontrol ketika merapat, memutuskan untuk merapat dari atas formulir dan sepenuhnya mengabaikan strip menu sepenuhnya, sangat menjengkelkan jika Anda bertanya kepada saya. Karena ini harus dilakukan secara dinamis dengan kode dan tidak selama mode desain ini menjadi sangat frustasi. Cara paling sederhana yang saya temukan adalah membuat panel selama mode desain dan merapat di bawah strip menu. Dari sana Anda bisa menambahkan / menghapus kontrol ke panel dan Anda dapat merapatnya selama waktu berjalan. Tidak perlu dipusingkan dengan semua kontrol Anda pada formulir Anda yang tidak benar-benar perlu diubah, terlalu banyak pekerjaan tergantung pada apa yang benar-benar perlu Anda lakukan.
object.dock = Fill
Panel.Controls.Add(object)
Saya tahu ini adalah pos lama tetapi saya menemukan sesuatu yang bermanfaat. Untuk menyesuaikan urutan kontrol saudara secara terprogram untuk kontrol yang dibuat secara dinamis, Anda dapat melakukan sesuatu seperti:
parentForm.Controls.SetChildIndex (myPanel, 0)
Dalam kasus saya, saya melakukan ini untuk memindahkan panel Dock / Fill menjadi kontrol pertama dalam formulir saya sehingga tidak akan tumpang tindih dengan kontrol docked lain yang diatur ke Dock / Top (strip menu).