Saya memiliki Aplikasi Formulir Windows yang sangat sederhana. Dan, di Windows (atau, setidaknya Aplikasi Formulir Windows), saat Anda menekan Enter saat berada di dalam Kontrol Kotak Teks Garis Tunggal, Anda akan mendengar bunyi Ding. Ini adalah suara yang tidak menyenangkan, yang menandakan Anda tidak dapat memasukkan baris baru, karena ini adalah TextBox satu baris.
Ini semua baik-baik saja. Namun, dalam Formulir saya, saya memiliki 1 Kotak Teks, dan Tombol Pencarian. Dan saya mengizinkan pengguna untuk Melakukan pencarian dengan menekan Enter setelah mereka selesai mengetik, jadi mereka tidak perlu menggunakan mouse untuk mengklik Tombol Pencarian.
Tapi suara Ding ini terdengar. Itu sangat mengganggu.
Bagaimana kita bisa membuatnya sehingga suara itu tidak diputar sama sekali di Formulir saya?
@David H - Begini cara saya mendeteksi tombol enter:
private void textBox1_KeyUp(object sender, KeyEventArgs e)
{
if (e.KeyCode == Keys.Enter)
{
// Perform search now.
}
}
sumber
Jawaban:
Lihat properti Form.AcceptButton . Anda dapat menggunakannya untuk menentukan tombol default untuk formulir, dalam hal ini untuk menekan enter.
Dari dokumen:
Ada juga properti CancelButton ketika pengguna menekan escape.
sumber
this.AcceptButton = buttonOK; this.CancelButton = buttonCancel;
Ini bekerja untuk saya:
SuppressKeyPress adalah trik sebenarnya. Saya harap itu membantu Anda.
sumber
e.Handled = true;
tidak cukup; ituSuppressKeyPress
yang berhasil.ToolStripTextBox.KeyDown
. Tidak ada solusi lain yang berhasil. Terima kasih!textbox
dan sayaKeyDown
Mencoba
sumber
Tab
lebih dulu?Tambahkan saja
e.SuppressKeyPress = true;
pernyataan "jika" Anda.sumber
Anda dapat Menggunakan KeyPress daripada KeyUp atau KeyDown yang lebih efisien dan berikut cara menanganinya
dan katakan damai pada 'Ding'
sumber
KeyDown
, menggunakane.Handled
dane.SuppressKeyPress
tidak berhasil untuk saya - masih berbunyi. Tetapi mengubahnya seperti yang disarankan di sini untuk menggunakanKeyPress' event and
e.Handled` melakukannya dengan baik.Gunakan
SuppressKeyPress
untuk menghentikan proses lanjutan dari tombol setelah menanganinya.sumber
Saya tersandung pada posting ini ketika mencoba menangani KeyDown, ini berhasil untuk saya.
Menekan Key Press menghentikan pengiriman acara ke kontrol yang mendasarinya. Ini harus berfungsi jika Anda secara manual menangani semua yang akan dilakukan tombol enter di dalam kotak teks itu. Maaf tentang Visual Basic.
sumber
Ada sedikit kemungkinan seseorang mendapatkan jawaban ini, tetapi beberapa jawaban lain benar-benar menakutkan. Peristiwa yang ditekan
KeyDown
membunuh 2 peristiwa tambahan dalam satu serangan. Mengature.Handled
properti ketrue
tidak berguna dalam konteks ini.Cara terbaik adalah mengatur
Form.AcceptButton
properti ke Tombol Pencarian yang sebenarnya.Ada juga cara lain untuk menggunakan
Enter
kunci - beberapa orang mungkin menginginkannya sebagaiTAB
tombol. Untuk melakukan itu, tambahkan baruButton
, setelLocation
propertinya di luarForm
area (mis.(-100, -100)
) - menyetelVisible
properti kefalse
mungkin menonaktifkanButton
penangan dalam beberapa kasus. SetelForm.AcceptButton
properti ke tombol baru Anda. DalamClick
event handler tambahkan kode berikutthis.SelectNextControl(ActiveControl, true, true, true, true)
Sekarang, Anda mungkin ingin mentransfer
focus
hanya jikafocus
padaTextBox
Anda mungkin ingin salah satuActiveControl
jenis pengujian atau menggunakane.Supress
properti di pengendali kejadian kontrol tidak dimaksudkan untuk digunakanEnter
sepertiTAB
Itu saja. Anda bahkan tidak perlu menangkape.KeyCode
sumber
sumber
Pada WinForms, tombol Enter menyebabkan suara Ding karena properti formulir AcceptButton tidak ditentukan. Jika Anda tidak membutuhkan AcceptButton, suara ding dapat ditekan dengan mengatur bentuk KeyPreview menjadi true dan memasukkan event KeyPress berikut:
Tidak peduli kontrol apa yang aktif, tidak akan ada lagi suara ding saat menekan tombol Enter. Karena urutan pemrosesan peristiwa kunci adalah KeyDown, KeyPress dan KeyUp, tombol Enter akan tetap berfungsi untuk peristiwa KeyDown untuk kontrol.
sumber
Setel properti IsDefault tombol Search Anda ke
true
. Ini akan menjadikannya tombol default dan akan diklik secara otomatis saat Enter ditekan.sumber
To specify the default button of a form, set the AcceptButton property of the form to the desired button.
AcceptButton
sepertinya lebih bergaya, tapi aku sudah terbiasaIsDefault
.Saya sudah cukup lama menghadapi masalah ini dan mencarinya di sini.
Setelah memikirkan hal ini selama beberapa waktu dan menginginkan cara termudah untuk memperbaikinya, saya menemukan cara termudah tetapi tidak begitu elegan untuk memperbaikinya.
Inilah yang saya lakukan.
Ini memecahkan semua masalah sekunder yang tercantum di utas ini termasuk ToolStripMenu. Keluhan terbesar saya adalah BindingNavigator, ketika saya memasukkan nomor catatan ke posisi saat ini untuk menavigasi ke dan menekan enter.
Sesuai pertanyaan awal di mana pemrogram menginginkan fungsi pencarian ketika tombol enter ditekan, saya cukup memasukkan kode pencarian di Tombol OK yang tidak terlihat!
Sejauh ini tampaknya ini menyelesaikan semua masalah tetapi seperti yang kita semua tahu dengan Visual Studio, sesuatu mungkin akan muncul.
Satu-satunya cara elegan lain yang mungkin saya pikirkan adalah menulis kelas penanganan keystroke baru yang merupakan cara untuk banyak pekerjaan untuk sebagian besar proyek saya.
sumber
Anda dapat mengatur multi-baris kotak teks Anda ke true lalu menangani penekanan tombol Enter.
sumber
saya mengubah properti kotak teks untuk kotak teks multiline dan berfungsi untuk saya.
sumber
sumber
Multiline
kode sama sekali tidak relevan.