Używam, System.Windows.Forms
ale o dziwo nie mam możliwości ich tworzenia.
Jak mogę uzyskać coś takiego jak okno dialogowe z monitem javascript, bez javascript?
MessageBox jest fajny, ale użytkownik nie ma możliwości wprowadzenia danych wejściowych.
Chcę, aby użytkownik wprowadzał dowolny możliwy tekst.
Odpowiedzi:
Musisz utworzyć własne okno dialogowe Monit. Być może mógłbyś stworzyć do tego klasę.
I nazywając to:
Aktualizacja :
Dodano przycisk domyślny ( klawisz Enter ) i początkowy fokus oparty na komentarzach i innym pytaniu .
źródło
Dodaj odniesienie do
Microsoft.VisualBasic
i użyj tego w swoim kodzie C #:Aby dodać odniesienie: kliknij prawym przyciskiem myszy References w oknie Project Explorer, a następnie Add Reference i zaznacz VisualBasic z tej listy.
źródło
Interaction
że nie istnieje w przestrzeni nazwMicrosoft.VisualBasic
W Windows Forms nie ma czegoś takiego natywnie.
W tym celu musisz stworzyć własny formularz lub:
użyj
Microsoft.VisualBasic
odniesienia.Inputbox to starszy kod wprowadzony do .Net w celu zapewnienia zgodności z VB6 - więc radzę tego nie robić.
źródło
Microsoft.VisualBasic.Compatibility
przestrzeni nazw.Microsoft.VisualBasic
jest raczej zestawem bibliotek pomocniczych na wierzchu .Net i nie jest tak naprawdę specyficzny dla VB.Generalnie nie jest dobrym pomysłem importowanie bibliotek VisualBasic do programów C # (nie dlatego, że nie będą działać, ale tylko ze względu na zgodność, styl i możliwość aktualizacji), ale możesz wywołać Microsoft.VisualBasic.Interaction.InputBox () aby wyświetlić rodzaj pudełka, którego szukasz.
Jeśli możesz utworzyć obiekt Windows.Forms, byłoby najlepiej, ale mówisz, że nie możesz tego zrobić.
źródło
VisualBasic
, ale to tylko w ich głowie. To uczucie nie ma rzeczywistości. Równie dobrze można by to nazwaćMicrosoft.MakeMyLifeEasierWithAlreadyImplementedMethods
przestrzenią nazw.Microsoft.VisualBasic.Compatibility
podprzestrzeń nazw, a nie cała sprawa. PrzestrzeńMicrosoft.VisualBasic
nazw zawiera wiele „podstawowych” funkcji ; nigdzie się nie wybiera. Microsoft zagroził „wygaśnięciem” VB 6, a nie VB.NET. Wielokrotnie obiecywali , że nigdzie się nie wybiera. Niektórzy ludzie nadal nie zdawali sobie sprawy z różnicy ...Inny sposób na zrobienie tego: Zakładając, że masz typ wejściowy TextBox, Utwórz formularz i masz wartość pola tekstowego jako właściwość publiczną.
W głównej formie będzie to kod:
;
W ten sposób kod wygląda na bardziej przejrzysty:
źródło
Odpowiedź Bas może teoretycznie wprowadzić Cię w kłopoty z pamięcią, ponieważ ShowDialog nie zostanie usunięty. Myślę, że to bardziej właściwy sposób. Wspomnij również o czytelności textLabel z dłuższym tekstem.
Realizacja:
źródło
prompt
w tym momencie jest on pusty. Prosty fix, aby umożliwić anulowanie monit ma zastąpićprompt.Dispose();
wnętrzepublic void Dispose()
zif (prompt != null) { prompt.Dispose(); }
Opierając się na powyższej pracy Bas Brekelmans, stworzyłem również dwie derywacje -> okna dialogowe „wejściowe”, które umożliwiają otrzymanie od użytkownika zarówno wartości tekstowej, jak i wartości logicznej (TextBox i CheckBox):
... i tekst wraz z wyborem jednej z wielu opcji (TextBox i ComboBox):
Oba wymagają tych samych zastosowań:
Nazwij ich tak:
Nazwij ich tak:
źródło
Odpowiedź Bas Brekelmans jest bardzo elegancka w swojej prostocie. Ale okazało się, że do rzeczywistej aplikacji potrzeba trochę więcej, na przykład:
Klasa tutaj obsługuje te ograniczenia: http://www.codeproject.com/Articles/31315/Getting-User-Input-With-Dialogs-Part-1
Właśnie pobrałem źródło i skopiowałem InputBox.cs do mojego projektu.
Zaskoczony, że nie ma czegoś nawet lepszego ... Moją jedyną prawdziwą skargą jest to, że tekst podpisu nie obsługuje znaków nowych linii, ponieważ używa kontrolki etykiety.
źródło
Niestety C # nadal nie oferuje tej możliwości we wbudowanych bibliotekach. Obecnie najlepszym rozwiązaniem jest utworzenie własnej klasy za pomocą metody wyświetlającej mały formularz. Jeśli pracujesz w programie Visual Studio, możesz to zrobić, klikając projekt> Dodaj klasę
Elementy wizualne C #> kod> klasa
Nazwij klasę PopUpBox (możesz zmienić jej nazwę później, jeśli chcesz) i wklej następujący kod:
Będziesz musiał zmienić przestrzeń nazw na dowolną, której używasz. Metoda zwraca ciąg, więc oto przykład, jak zaimplementować ją w metodzie wywołującej:
Ta metoda sprawdza zwrócony ciąg znaków pod kątem wartości tekstowej, pustego ciągu lub „anuluj” (metoda getUserInput zwraca „anuluj” po kliknięciu przycisku anulowania) i działa odpowiednio. Jeśli użytkownik nic nie wprowadził i kliknął OK, poinformuje o tym użytkownika i zapyta, czy chce anulować, czy ponownie wprowadzić tekst.
Notatki: w mojej własnej implementacji stwierdziłem, że we wszystkich pozostałych odpowiedziach brakowało 1 lub więcej z następujących odpowiedzi:
Dlatego zamieściłem własne rozwiązanie. Mam nadzieję, że ktoś uzna to za przydatne. Podziękowania dla komentujących Bas i Gideon + za wasze uwagi, pomogliście mi znaleźć praktyczne rozwiązanie!
źródło
oto moja refaktoryzowana wersja, która akceptuje multiline / single jako opcję
źródło
Oto przykład w VB.NET
źródło