Saya memiliki formulir dengan kontrol tab dan banyak halaman tab. Tabpage tersebut dapat ditambahkan secara dinamis dan kemudian membuat beberapa kontrol anak. Prosesnya adalah dengan mengklik header tabpage terakhir ("+"). Itu memicu acara pembatalan pemilihan dan pemilihan pada tabcontrol, untuk halaman saat ini dan +halaman masing-masing. Memilih +laman menyebabkan halaman baru disisipkan pada indeks kedua hingga terakhir (dan membuat kontrol anak) dan memilihnya. Bagian terakhir ini kembali mengaktifkan peristiwa pembatalan pemilihan dan pemilihan pada kontrol tab, sekarang untuk +halaman dan halaman baru masing-masing.

Masalah saya adalah ketika menggunakan ctrl+tab untuk menambahkan halaman tab, acara memilih dan membatalkan pilihan untuk setiap detik halaman tab baru tidak diaktifkan. Ini menyebabkan halaman tab baru kosong dari kontrol anak. Yang aneh adalah ia bekerja dengan sempurna saat menggunakan mouse, tombol panah, dan menavigasi melalui halaman tab yang ada dengan cara apa pun. Hanya membuat halaman baru menggunakan ctrl+tab tidak bekerja dengan benar.

public FormConstructor()
{
    tabControl.SelectedIndex = 0;
    tabControl.Selecting += tabControl_Selecting;
    tabControl.Deselecting += tabControl_Deselecting;
}
private void tabControl_Deselecting(object sender, TabControlCancelEventArgs e)
{
    //Code removes events from and disposes of childcontrols    - works correctly
}
private void tabControl_Buizen_Selecting(object sender, TabControlCancelEventArgs e)
{
    if (e.TabPage != tabPage_plus) e.TabPage.Controls.Add(new TextBox());       //create controls
    if (e.TabPage == tabPage_plus)
    {
        tabControl_Buizen.TabPages.Insert(e.TabPageIndex, "Buis " + (e.TabPageIndex + 1).ToString());    //create new tabpage
        tabControl_Buizen.SelectedIndex -= 1;    //Commenting this out and selecting manually works
    }
}

Saya telah menemukan bahwa tidak memilih halaman yang baru dibuat secara otomatis, dan sebagai gantinya menavigasi mundur menggunakan ctrl+shift+tab berfungsi dengan baik, tetapi saya belum dapat menemukan alasannya. Saya telah melihat Properti SelectedIndex, tetapi tidak tahu apakah ini penyebabnya.

Adakah yang tahu apa yang menyebabkan perilaku acara ini tidak dipecat? Saya dapat menambahkan lebih banyak kode jika diperlukan.

0
Kevin L. 9 Maret 2020, 14:20

1 menjawab

Jawaban Terbaik

Mengapa badan halaman tab tidak diperbarui dengan kontrol tab .NET?

Jadi setelah mencari lebih dari 3 hari saya menemukan ini dengan mengklik melalui lapisan pertanyaan terkait.

Sepertinya waktu mengubah tab yang dipilih saat tabcontrol masih memproses acara mengacaukannya hingga berhenti menembakkan acara (dalam kasus saya). Mengganti baris kode terakhir dengan this.BeginInvoke(new Action(() => tabControl_Buizen.SelectedIndex -= 1)); telah memecahkan masalah saya.

1
Kevin L. 9 Maret 2020, 13:41