[ad_1]
Halo semua!
Saya memiliki masalah dengan TextBox di formulir saya.
Tangkapan layar seperti gambar http://rghost.ru/5011999/image.png
Mari kita tunjukkan situasinya dengan contoh sederhana.
1) Buat proyek winforms baru dengan Form1;
2) Buat Form2 baru, masukkan kontrol TextBox ke dalamnya;
3) Mari kita tulis kode sederhana yang membuat bentuk non-modal;
Form frm = new Form(); frm.StartPosition = FormStartPosition.CenterParent; frm.TopLevel = false; // here is the problem frm.Parent = this; frm.Show(); frm.BringToFront();
Setelah Anda menjalankan kode ini, formulir dengan kotak teks akan muncul.
Ketik sesuatu di kotak teks, misalnya “ini adalah ujian”. Sekarang, cobalah untuk memilih sebagian atau seluruh teks dengan mouse – Anda tidak bisa, karena tidak berhasil.
Ya, Anda dapat memilih seluruh teks dengan klik dua kali, tetapi Anda tidak dapat membatalkan pilihan setelah itu. Selain itu, bagaimana jika Anda hanya perlu memilih sebagian teks untuk menghapusnya?!
Ketika formulirnya adalah modal, semuanya berfungsi dengan baik.
Situasi yang sama untuk Memo dan saya kira untuk beberapa kontrol teks lainnya.
Semua ini saya perlukan karena kami menggunakan proyek MDI yang serius, dan di dalam setiap formulir MDI, pengguna dapat membuka formulir yang berbeda (misalnya formulir pencarian). Tentu saja, kita bisa menjadikannya modal, tapi ini bukan MDI yang sebenarnya sejak saat itu.
Ada saran?
Solusi 3
Mengganti Parent
dengan MdiParent
:
Form2 frm = new Form2(); frm.StartPosition = FormStartPosition.CenterParent; frm.TopLevel = false; frm.MdiParent = this; frm.Show(); frm.BringToFront();
Dan pastikan formulir utama Anda memilikinya IsMdiContainer
disetel ke benar.
—————
Jangan salahkan kami karena Anda tidak menjelaskan masalah Anda dengan benar:
Jika saya memahami dengan baik dari komentar Anda, Anda memiliki 3 bentuk:
1- MainForm
dengan IsMdiContainer
disetel ke benar
2- ChildForm
dengan MdiParent
mulai MainForm
3- AnotherChildForm
. Dan Anda ingin yang ini menjadi anaknya ChildForm
.
Jika ini benar, maka Anda tidak dapat menghilangkan bug tersebut. Untuk menghilangkan bug tersebut ChildForm
seharusnya keduanya MdiContainer
Dan MdiChild
yang tidak mungkin. Anda harus menjadikan formulir ke-3 sebagai anak MainForm
atau tidak menggunakan formulir (mungkin a UserControl
atau sesuatu).
Solusi 1
Pertama, apa yang ingin Anda capai dengan menetapkan TopLevel
ke false
? Dan mengapa kamu menelepon BringToFront()
? Ketika Anda membuat formulir modeless, maka secara otomatis muncul (dibawa ke depan).
Kedua, sepertinya Anda tidak begitu memahami sifat aplikasi MDI, atau hubungan antara jendela anak dan bentuk lainnya.
Ketiga, jika Anda membuat jendela modeless, tindakannya harus seperti ini:
public partial class MyForm { MyModelessForm m_modelessForm = null; private void ShowModelessForm() { if (m_modelessForm == null) { m_modelessForm = new ModelessForm(); // configure the form here if necessary } m_modelessForm.Show(); m_modelessForm.BringToFront(); } }
Solusi 2
Dengan asumsi Anda mengatur properti IsMdiContaine
r dari Form1
benar, kode Anda akan terbaca seperti ini:
Form2 frm2 = new Form2(); frm2.MdiParent = this; frm2.Show();
Solusi 4
Coba atur properti FormBorderStyle formulir anak ke ‘tidak ada’
[ad_2]
コメント