Mam problem ze znalezieniem głównych różnic między tymi dwoma skrzynkami. Jaka jest różnica między System.Windows.MessageBox
i System.Windows.Forms.MessageBox
?System.Windows.MessageBox kontra System.Windows.Forms.MessageBox
Odpowiedz
System.Windows.MessageBox
został dodany z WPF i istnieje w ramach zespołów WPF (PresentationFramework.dll).
System.Windows.Forms.MessageBox
został dodany do Windows Forms i istnieje w zestawach Windows Forms.
Jeśli twój program jest programem Windows Forms, używałbym tego ostatniego (System.Windows.Forms.MessageBox
), ponieważ nie będzie on pobierał zależności od WPF. Z drugiej strony, jeśli tworzysz dla WPF, użyłbym System.Windows.MessageBox
.
Dzięki za odpowiedź! Korzystam z formularza WPF i jednym z powodów, dla których byłem ciekawy tego, kiedy użyłem System.Windows.MessageBox, było to, że niektóre z moich powiązań zostały przerwane. Po przełączeniu do System.Windows.Forms.MessageBox moje powiązania pozostały nienaruszone. Czy istnieją pewne aspekty implementacji MessageBox, które mogą zrywać moje powiązania? Dzięki – MisterXero
@MisterXero: Nie - nie powinno to mieć żadnego wpływu. Możesz zadać inne pytanie wyjaśniające, co robisz (z próbkami kodu) do tego ... –
Obie w zasadzie robią to samo, z wyjątkiem system.windows.messagebox
jest WPF i system.windows.forms.messagebox
jest Windows Forms. Jeśli używasz WPF, użyj pierwszego, a WinForm używa tego drugiego.
Zarówno ostatecznie nazwać ten sam niski poziom Windows API o ile wiem ...
Interesujące ... Kiedy używam system.windows.messagebox, łamie ono powiązanie mojego formularza WPF, ale system.windows. forms.messagebox nie. Jakieś pomysły, dlaczego tak się dzieje? – MisterXero
@MisterXero co dokładnie masz na myśli mówiąc "łamie wiązanie"? Dodanie odwołania do zestawu i użycie pełnej nazwy nie powinno niczego przerwać. Oba mają wewnętrzną klasę 'UnsafeNativeMethods' w różnych przestrzeniach nazw mniej więcej tak samo, chociaż implementacja WPF jest bardziej elegancka. – mbx
Jeden dodatkowy punkt należy zauważyć:
Jeśli chcesz wyświetlić okno wiadomości w aplikacji, która nie jest ani aplikacji formularzy systemu Windows lub aplikacji formularzy (na przykład aplikacji konsoli .NET), nie należy przeciągać odwołań do zestawów, ponieważ wydaje się, że jest to powszechna mantra w Internecie.
Zamiast tego należy użyć pinvoke i zadzwonić do user32 następująco:
[DllImport("user32.dll", SetLastError = true, CharSet = CharSet.Auto)]
public static extern MessageBoxResult MessageBox(IntPtr hWnd, String text, String caption, int options);
/// <summary>
/// Flags that define appearance and behaviour of a standard message box displayed by a call to the MessageBox function.
/// </summary>
[Flags]
public enum MessageBoxOptions : uint
{
Ok = 0x000000,
OkCancel = 0x000001,
AbortRetryIgnore = 0x000002,
YesNoCancel = 0x000003,
YesNo = 0x000004,
RetryCancel = 0x000005,
CancelTryContinue = 0x000006,
IconHand = 0x000010,
IconQuestion = 0x000020,
IconExclamation = 0x000030,
IconAsterisk = 0x000040,
UserIcon = 0x000080,
IconWarning = IconExclamation,
IconError = IconHand,
IconInformation = IconAsterisk,
IconStop = IconHand,
DefButton1 = 0x000000,
DefButton2 = 0x000100,
DefButton3 = 0x000200,
DefButton4 = 0x000300,
ApplicationModal = 0x000000,
SystemModal = 0x001000,
TaskModal = 0x002000,
Help = 0x004000, //Help Button
NoFocus = 0x008000,
SetForeground = 0x010000,
DefaultDesktopOnly = 0x020000,
Topmost = 0x040000,
Right = 0x080000,
RTLReading = 0x100000,
}
/// <summary>
/// Represents possible values returned by the MessageBox function.
/// </summary>
public enum MessageBoxResult : uint
{
Ok = 1,
Cancel,
Abort,
Retry,
Ignore,
Yes,
No,
Close,
Help,
TryAgain,
Continue,
Timeout = 32000
}
var result = User32.MessageBox(IntPtr.Zero, "Debugging Break", "Your Console Application", (int)User32.MessageBoxOptions.Ok);
JFYI: System.Windows.MessageBox z WPF Presentation Framework jest tylko zarządzanym opakowaniem wokół tego wywołania. WPF MessageBox w rzeczywistości nie jest oknem WPF. Jeśli masz zastrzeżenia co do tego, co sugeruje @stacy, nie miej takich zastrzeżeń. – jrwren
- 1. Angular.js kontra Knockout.js kontra Backbone.js
- 2. VirtualBox - Klon kontra Snapshot kontra Kopia zapasowa
- 3. Porównanie repozytorium kontra dostawca kontra usługa
- 4. APL kontra A w porównaniu z J kontra K?
- 5. Azure AD kontra Azure AD B2C kontra Azure AD B2B
- 6. Skojarzone kontra delegowane, OAuth kontra OpenID Connect vs SAML
- 7. UiBinder - HTMLPanel kontra div
- 8. Modernizacja kontra HTML shiv
- 9. Podstawowy klucz kontra kluczowego
- 10. "size_t" kontra "container :: size_type"
- 11. Guice kontra AspectJ
- 12. Zend_Validate_EmailAddress kontra filter_var (..., FILTER_VALIDATE_EMAIL)
- 13. StreamReader kontra BinaryReader?
- 14. Zadania kontra ThreadPool
- 15. Moduły NodeJS kontra klasy
- 16. Tiggr kontra Application Craft
- 17. Cassandra kontra Riak
- 18. Singleton kontra Intents (Android)
- 19. ruby regex skanować kontra = ~
- 20. XML kontra twardy interfejs?
- 21. Lamina kontra Storm
- 22. Android - Aktywność kontra FragmentActivity?
- 23. Akamai kontra CloudFront
- 24. SmalltalkHub kontra SqueakSource3
- 25. ExtJs Store.Load() kontra Model.Load()
- 26. Kolba: "sesja" kontra "g"?
- 27. DotNetOpenAuth kontra Owin OAuth
- 28. Postgresql ILIKE kontra pełnotekstowego
- 29. Gniazda kontra HttpListener
- 30. Panda transformacja() kontra zastosowanie()
można wymienić dwa razy, w komentarzach, że jedno okno komunikatu „łamie swoje powiązania” można wyjaśnić, czy może, jak sugeruje, zaczęło się kolejne pytanie na ten temat? – TheZenker