saya menggunakan System.Windows.Forms
tetapi anehnya tidak memiliki kemampuan untuk membuatnya.
Bagaimana saya bisa mendapatkan sesuatu seperti dialog prompt javascript, tanpa javascript?
MessageBox bagus, tetapi tidak ada cara bagi pengguna untuk memasukkan input.
Saya ingin pengguna memasukkan masukan teks apa pun yang memungkinkan.
Jawaban:
Anda perlu membuat dialog Prompt Anda sendiri. Anda mungkin bisa membuat kelas untuk ini.
Dan menyebutnya:
Pembaruan :
Menambahkan tombol default (tombol enter ) dan fokus awal berdasarkan komentar dan pertanyaan lain .
sumber
Tambahkan referensi
Microsoft.VisualBasic
dan gunakan ini ke dalam kode C # Anda:Untuk menambahkan refernce: klik kanan pada References di jendela Project Explorer Anda lalu pada Add Reference, dan centang VisualBasic dari daftar itu.
sumber
Interaction
tidak ada di namespaceMicrosoft.VisualBasic
Tidak ada hal seperti itu secara native di Windows Forms.
Anda harus membuat formulir Anda sendiri untuk itu atau:
gunakan
Microsoft.VisualBasic
referensi.Inputbox adalah kode warisan yang dibawa ke .Net untuk kompatibilitas VB6 - jadi saya menyarankan untuk tidak melakukan ini.
sumber
Microsoft.VisualBasic.Compatibility
namespace.Microsoft.VisualBasic
lebih merupakan kumpulan pustaka pembantu di atas .Net dan sama sekali tidak spesifik untuk VB.Biasanya bukan ide yang baik untuk mengimpor pustaka VisualBasic ke dalam program C # (bukan karena mereka tidak akan berfungsi, tetapi hanya untuk kompatibilitas, gaya, dan kemampuan untuk meningkatkan), tetapi Anda dapat memanggil Microsoft.VisualBasic.Interaction.InputBox () untuk menampilkan jenis kotak yang Anda cari.
Jika Anda dapat membuat objek Windows.Forms, itu yang terbaik, tetapi Anda mengatakan Anda tidak dapat melakukannya.
sumber
VisualBasic
, tapi itu hanya di kepala mereka. Tidak ada realitas untuk perasaan itu. Ini akan disebut sebagaiMicrosoft.MakeMyLifeEasierWithAlreadyImplementedMethods
namespace.Microsoft.VisualBasic.Compatibility
sub-namespace, bukan keseluruhannya. Banyak fungsi "inti" disertakan dalamMicrosoft.VisualBasic
namespace; itu tidak akan berhasil. Microsoft telah mengancam untuk "menenggelamkan" VB 6, bukan VB.NET. Mereka telah berjanji berulang kali bahwa itu tidak akan berhasil. Beberapa orang tampaknya masih belum menemukan perbedaannya ...Cara lain untuk melakukan ini: Dengan asumsi Anda memiliki tipe input TextBox, Buat Formulir, dan memiliki nilai kotak teks sebagai properti publik.
Dalam bentuk utama, ini akan menjadi kode:
;
Dengan cara ini, kodenya terlihat lebih bersih:
sumber
Jawaban dari Bas dapat membuat Anda mengalami masalah memori secara teoritis, karena ShowDialog tidak akan dibuang. Saya pikir ini adalah cara yang lebih tepat. Juga sebutkan textLabel dapat dibaca dengan teks yang lebih panjang.
Penerapan:
sumber
prompt
nol pada saat itu. Perbaikan sederhana untuk memungkinkan pembatalan prompt adalah dengan menggantiprompt.Dispose();
di dalampublic void Dispose()
denganif (prompt != null) { prompt.Dispose(); }
Berdasarkan karya Bas Brekelmans di atas, saya juga membuat dua derivasi -> dialog "input" yang memungkinkan Anda menerima dari pengguna baik nilai teks maupun boolean (TextBox dan CheckBox):
... dan teks beserta pilihan salah satu dari beberapa opsi (TextBox dan ComboBox):
Keduanya membutuhkan penggunaan yang sama:
Panggil mereka seperti ini:
Panggil mereka seperti ini:
sumber
Jawaban Bas Brekelmans sangat elegan dalam kesederhanaannya. Tapi, saya menemukan bahwa untuk aplikasi yang sebenarnya dibutuhkan lebih banyak seperti:
Kelas di sini menangani batasan ini: http://www.codeproject.com/Articles/31315/Getting-User-Input-With-Dialogs-Part-1
Saya baru saja mengunduh sumber dan menyalin InputBox.cs ke dalam proyek saya.
Terkejut tidak ada sesuatu yang lebih baik meskipun ... Satu-satunya keluhan saya adalah teks keterangan tidak mendukung baris baru di dalamnya karena menggunakan kontrol label.
sumber
Sayangnya C # masih tidak menawarkan kemampuan ini pada libs bawaan. Solusi terbaik saat ini adalah membuat kelas khusus dengan metode yang memunculkan formulir kecil. Jika Anda bekerja di Visual Studio, Anda dapat melakukannya dengan mengklik Project> Tambahkan kelas
Visual C # item> kode> kelas
Beri nama kelas PopUpBox (Anda dapat mengganti namanya nanti jika Anda mau) dan tempelkan kode berikut:
Anda perlu mengubah namespace menjadi apa pun yang Anda gunakan. Metode ini mengembalikan string, jadi berikut adalah contoh cara menerapkannya dalam metode panggilan Anda:
Metode ini memeriksa string yang dikembalikan untuk nilai teks, string kosong, atau "batal" (metode getUserInput mengembalikan "batal" jika tombol batal diklik) dan bertindak sesuai dengan itu. Jika pengguna tidak memasukkan apa pun dan mengeklik Oke, pengguna akan diberi tahu dan menanyakan apakah mereka ingin membatalkan atau memasukkan kembali teks mereka.
Catatan posting: Dalam implementasi saya sendiri, saya menemukan bahwa semua jawaban lain kehilangan 1 atau lebih dari yang berikut ini:
Jadi, saya telah memposting solusi saya sendiri. Saya berharap seseorang merasakan manfaatnya. Penghargaan untuk komentator Bas dan Gideon + atas kontribusi Anda, Anda membantu saya menghasilkan solusi yang bisa diterapkan!
sumber
inilah versi refactored saya yang menerima multiline / single sebagai opsi
sumber
Berikut adalah contoh di VB.NET
sumber