W jaki sposób można uzyskać tworzenie Modeless MessageBox? Czy muszę po prostu utworzyć własną klasę Windows Form i użyć jej? Jeśli tak, czy istnieje prosty sposób dodania ikony ostrzeżenia (zamiast wstawiania własnego obrazu) i zmiany rozmiaru na podstawie objętości tekstu?Tworzenie bezmyślnej skrzynki wiadomości
Odpowiedz
Musisz utworzyć formularz i używać Show()
, aby wyświetlić go niemodalne. MessageBox.Show(...)
Zachował się Modal jak widać na przykładzie przez ghiboz; "Opis komunikatu" jest wyświetlany, dopóki użytkownik nie naciśnie przycisku.
Z MessageBox.Show(...)
otrzymasz wynik natychmiast po zamknięciu skrzynki wiadomości; w przypadku okna niemodalnego, twój kod będzie musiał mieć mechanizm taki jak zdarzenie, które zareaguje, gdy użytkownik ostatecznie wybierze coś w twoim oknie komunikatu.
Można użyć ikony standardowe ostrzegawczy system wykorzystujący SystemIcons
UWAGA: Ta utworzy okno dialogowe Modalne, które nie jest tym, o co pyta się:
tutaj jest przykładowy kod
if (MessageBox.Show("Description of the message", "Caption text", MessageBoxButtons.YesNo, MessageBoxIcon.Error) == DialogResult.Yes)
{
// Do some stuff if yes pressed
}
else
{
// no pressed
}
Jestem po niemodalnym dialogu; nie modalny. – Smashery
Ta odpowiedź otrzymała głosy, mimo że była przeciwieństwem tego, o co prosiłem (modeless). Aby inni nie sądzili, że ta odpowiedź rozwiąże ten konkretny problem, zredagowałem odpowiedź z zastrzeżeniem. – Smashery
+1 Dzięki, znalazłem to, gdy szukałem sposobu na stworzenie modalnego MessageBox. – Martin
Krótki pisania kodu, można stworzyć małą formę, która w konstruktorze robi następujące
- pobiera ciąg parametru jako komunikat do wyświetlania
- zapełnia etykiety na formularzu z tym ciąg
- Ładuje ikonę z jednego z następujących powodów (przesuń w enum do konstruktora)
SystemIcons.Application
SystemIcons.Asterix
SystemIcons.Error
SystemIcons.Exclamation
SystemIcons.Hand
SystemIcons.Information
SystemIcons.Question
SystemIcons.Shield
SystemIcons.Warning
SystemIcons.WinLogo
- zwraca show(), która powoduje, że jest to modalne dialogowe
Jeśli naprawdę chciał, można słuchać do zdarzenia, które są opalane, gdy przycisk jest wciśnięty przycisk OK.
// nie CommNet
object sync = new object();
ManualResetEvent Wait = new ManualResetEvent();
//you should create a place holder named MessageData for Message Data.
List<MessageData> Messages = new List<MessageData>();
internal void ShowMessage(string Test, string Title, ....)
{
MessageData MSG = new MessageData(Test, Title);
Wait.Set();
lock(sync) Messages.Add(MSG);
}
// another thread should run here.
void Private_Show()
{
while(true)
{
while(Messsages.Count != 0)
{
MessageData md;
lock(sync)
{
md = List[0];
List.RemoveAt(0);
}
MessageBox.Show(md.Text, md.Title, md....);
}
Wait.WaitOne();
}
}
potrzebuje więcej wątków i więcej kodu (nie mam wystarczająco dużo czasu, aby napisać) dla jednoczesnych okna komunikatów.
Jeśli potrzebujesz okna z komunikatem, które się wyświetla, gdy twój kod nadal działa w tle (pole nadal jest modalne i uniemożliwi użytkownikowi korzystanie z innych okien do momentu kliknięcia OK), zawsze możesz uruchomić okno komunikatu we własnym wątku i kontynuuj robienie tego, co robisz w oryginalnym wątku:
// Do stuff before.
// Start the message box -thread:
new Thread(new ThreadStart(delegate
{
MessageBox.Show
(
"Hey user, stuff runs in the background!",
"Message",
MessageBoxButtons.OK,
MessageBoxIcon.Warning
);
})).Start();
// Continue doing stuff while the message box is visible to the user.
// The message box thread will end itself when the user clicks OK.
Dzięki, to faktycznie odpowiedział bezpośrednio na pytanie. – eruciform
Możesz użyć 'MessageBox.Show' z wątku, ale nie skonstruować i pokazać cały" Form "? Czy istnieje sposób .NET do symulacji "MessageBox" za pomocą formularza? (być może potrzebuję MessageBox z większymi możliwościami wyboru niż standardowe okno komunikatu) –
To działa dla mnie i, w przeciwieństwie do tego, co powiedziałem tojotamies, nie jest modalne, ale niemodalne. – ajs410
- 1. Jak zmienić tekst na przyciskach skrzynki wiadomości?
- 2. Usuwanie wiadomości SMS ze skrzynki odbiorczej
- 3. C# - Użyj formularza zamiast skrzynki wiadomości
- 4. Tworzenie ticketa wiadomości
- 5. Śledzenie akcji pobierania wiadomości ze skrzynki pocztowej w Erlang
- 6. Postgresql kwerendy skrzynki
- 7. Tworzenie prostego schematu bazy danych wiadomości e-mail/wiadomości
- 8. Skrzynki podręczne Singleton lub Instancje?
- 9. Tworzenie niestandardowych typów wiadomości w win32?
- 10. Tworzenie niestandardowych nagłówków wiadomości e-mail
- 11. Jak określić tworzenie 'z' wiadomości e-mail
- 12. Szybsze odczytywanie skrzynki odbiorczej w Javie
- 13. IE10 Wybieranie numeru skrzynki
- 14. Jak uniemożliwić wysyłanie wiadomości SMS do skrzynki odbiorczej w systemie Android?
- 15. czytanie/parsowanie wiadomości SMS ze skrzynki odbiorczej Z uprawnieniami użytkownika IOS
- 16. Czy aktor Akka może w razie potrzeby wysyłać wiadomości ze swojej skrzynki pocztowej?
- 17. Pobierz wszystkie wiadomości skrzynki odbiorczej za pomocą interfejsu Gmail API, korzystając z PHP
- 18. limit rozmiaru skrzynki pocztowej scala
- 19. Rust nie może znaleźć skrzynki
- 20. Tworzenie wiadomości (np. Wersji roboczych) w Gmailu za pomocą protokołu IMAP/SMTP?
- 21. Zamieść wiadomość do skrzynki odbiorczej przyjaciół na facebooku
- 22. Tworzenie konta pocztowego zamiast skrzynki pocztowej za pomocą IMAP w php
- 23. Rails 4.1 Mailer Podgląd i tworzenie niestandardowych wiadomości e-mail
- 24. Tworzenie wiadomości e-mail w Javie bez sesji mailowej
- 25. Tworzenie edytora WYSIWYG HTML do edytowania szablonów wiadomości e-mail
- 26. Używanie WebDAV do uzyskiwania dostępu do skrzynki pocztowej Exchange 2003
- 27. Iphone 4.0 = jak odczytać SMS ze skrzynki odbiorczej IPhone Programowo
- 28. Czy chcesz usunąć importowane pliki z Dokumentów/Skrzynki odbiorczej?
- 29. imap_search ogranicza liczbę zwracanych wiadomości
- 30. Android: Zmniejsz szerokość rozwijanej skrzynki spinnera
To była moja pierwsza implementacja - niestety powoduje to awarię mojego programu podczas uruchamiania z procesu w tle z jakiegoś powodu. Niemniej wydaje się, że nie ma lepszego rozwiązania. Dzięki. – Smashery
Nie można modyfikować elementów interfejsu użytkownika z dodatkowego wątku. Spójrz na Dispatchera, aby przenieść go do głównego wątku. – Jeff