Kontrol teks tidak memungkinkan untuk memilih teks dengan mouse ketika TopLevel = false

pemrograman


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;

TENGAH
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 MainFormatau 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:

C#
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 IsMdiContainer 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’

コメント

タイトルとURLをコピーしました