Bagaimana cara menyembunyikan hanya tombol Tutup (x)?

151

Saya memiliki dialog modal, dan perlu menyembunyikan tombol Tutup (X), tetapi saya tidak dapat menggunakan ControlBox = false, karena saya perlu menjaga tombol Minimalkan dan Maksimalkan.

Saya perlu menyembunyikan hanya tombol Tutup, apakah ada cara untuk melakukan itu?

Terima kasih banyak!

Pembaruan: Saya memiliki izin untuk menonaktifkannya, yang lebih sederhana :) Terima kasih semua!

stefano m
sumber
Mungkinkah ini yang Anda inginkan: [Sembunyikan Tombol Tutup [X] dari Formulir Win di C # .NET] ( sameeramrutia.wordpress.com/2008/09/16/… ) baru saja googled :,hide close button c# hasil kedua di sini! =)
Miguel Angelo
Anda salah, saya tidak ingin tombol menonaktifkan, tetapi menyembunyikannya .. apakah Anda dapat menemukan solusi?
stefano m
8
Kebutuhan adalah kata yang kuat. Dari mana datangnya persyaratan ini? Apa persyaratan sebenarnya - bahwa pengguna tidak dapat menghentikan program, atau bahwa UI "sepertinya tidak memiliki tombol tutup"? Karena ada cara lain untuk mengatasi ini, dan Anda akan sulit sekali untuk benar-benar menutup semuanya (mis. Task manager, taskkill, mungkin alt + f4, dll). Saya pribadi tidak akan bekerja terlalu keras dalam hal ini, karena kecuali Anda kembali menguliti seluruh aplikasi Anda, itu akan sia-sia, dan menghancurkan harapan / kontinuitas pengguna dengan program Windows lainnya.
Merlyn Morgan-Graham
4
@Sayem itu mengungkapkan halaman ini, jadi jangan kritik seperti itu.
Brian Graham
1
Gosok tombol perkecil dari daftar Anda juga. Meminimalkan dialog modal akan secara otomatis membuatnya menutup. Seharusnya begitu, itu adalah satu-satunya jendela yang masih diaktifkan. Ketika Anda menguranginya, tidak akan ada jendela yang tersisa yang masih bisa mendapatkan fokus sehingga pengguna tidak dapat kembali ke program Anda. Anda sekarang berada di "apakah ini masih masuk akal?" wilayah. Tidak.
Hans Passant

Jawaban:

148

Anda tidak bisa menyembunyikannya, tetapi Anda bisa menonaktifkannya dengan mengganti properti CreateParams dari formulir.

private const int CP_NOCLOSE_BUTTON = 0x200;
protected override CreateParams CreateParams
{
    get
    {
       CreateParams myCp = base.CreateParams;
       myCp.ClassStyle = myCp.ClassStyle | CP_NOCLOSE_BUTTON ;
       return myCp;
    }
}

Sumber: http://www.codeproject.com/KB/cs/DisableClose.aspx

Daniel A. White
sumber
terima kasih, saya menemukan solusi ini, tetapi kami ingin menyembunyikannya, tidak hanya menonaktifkan :( anywat, terima kasih!
stefano m
4
tidak ada cara lain selain mendesain formulir Anda dari awal.
Daniel A. White
ya. lebih baik buat formulir Anda sendiri dengan kotak kontrol Anda sendiri tanpa tombol tutup kemudian sembunyikan kotak kontrol formulir induk.
Bahamut
Jawaban dari 'Abhishek.Chopra' sederhana dan efektif.
Altaf Patel
Bagaimana cara mengaktifkannya saat runtime lagi?
Mike de Klerk
158

Kita dapat menyembunyikan tombol tutup pada formulir dengan mengatur this.ControlBox=false;

Abhishek.Chopra
sumber
29
Apakah Anda membaca pertanyaan di mana ia menentukan bahwa itu bukan pilihan?
Servy
28
Melakukan pencarian Google dan SO QA ini adalah hit teratas. Dan jawaban ini adalah apa yang saya cari. Abhishek terima kasih ...
Abel Gaxiola
15
Itu menyembunyikan semua tombol ukuran itu. Bukan hanya X.
Rich Shealer
1
Terima kasih banyak! Cara termudah.
26

Nah, Anda bisa menyembunyikannya, dengan menghapus seluruh menu sistem:

private const int WS_SYSMENU = 0x80000;
protected override CreateParams CreateParams
{
    get
    {
        CreateParams cp = base.CreateParams;
        cp.Style &= ~WS_SYSMENU;
        return cp;
    }
}

Tentu saja, melakukan itu akan menghapus tombol perkecil dan maksimalkan.

Jika Anda menyimpan menu sistem tetapi menghapus item tutup maka tombol tutup tetap tetapi dinonaktifkan.

Alternatif terakhir adalah mengecat area non-klien sendiri. Cukup sulit untuk memperbaikinya.

David Heffernan
sumber
4
Ini juga berhasil, hebat! Tetapi ControlBox = false mudah digunakan sebagai cara Anda.
simmeone
1
Ini sama dengan pengaturan ControlBoxke false. Juga, itu gagal persyaratan: Saya harus menjaga tombol Minimalkan dan Maksimalkan
whiteshooz
23

Anda dapat menyembunyikan kotak tertutup dengan menggunakan

this.ControlBox = false;

dan jangan lupa menambahkan spasi this.Text = " "untuk membuatnya seperti ini

masukkan deskripsi gambar di sini

Ramgy Borja
sumber
2
Ini yang saya butuhkan. Terima kasih.
Kosmas
2
Ini tidak benar. Langsung dari pertanyaan OP: Saya tidak bisa menggunakanControlBox = false
Martin
8

Jika Anda benar-benar ingin menyembunyikannya, seperti pada "tidak terlihat", maka Anda mungkin harus membuat formulir tanpa batas dan menggambar sendiri komponen teks. Pustaka VisualStyles memiliki Elemen Windows yang tersedia. Anda juga harus menambahkan kembali fungsi mengubah ukuran formulir atau memindahkan formulir dengan meraih bilah keterangan. Belum lagi menu sistem di sudut.

Dalam kebanyakan kasus, sulit untuk membenarkan memiliki tombol "tutup" tidak tersedia, terutama ketika Anda menginginkan bentuk modal dengan kemampuan meminimalkan. Meminimalkan bentuk modal benar-benar tidak masuk akal.

LarsTech
sumber
2

Dalam properti form Anda, atur 'Control Box' = False tetapi akan menyembunyikan juga Diminimalkan dan Maksimalkan.

Muhammad Haroon
sumber
1

Anda bisa menyembunyikan tombol tutup dengan mengubah FormBorderStyle dari bagian properti atau secara terprogram dalam konstruktor menggunakan:

public Form1()
{
InitializeComponent();
this.FormBorderStyle = FormBorderStyle.None;
}

maka Anda membuat item strip menu untuk keluar dari aplikasi.

Bersulang

Josh John
sumber