2011-01-11 24 views
11

İki ileti kutusu arasındaki önemli farkların ne olduğunu bulmakta zorlanıyorum. System.Windows.MessageBox ve System.Windows.Forms.MessageBox arasındaki fark nedir? WPF ile eklenmiş ve WPF derlemeleri (PresentationFramework.dll) içinde mevcut olanSystem.Windows.MessageBox vs System.Windows.Forms.MessageBox

+0

Sen yorumlarında, iki kere söz tek bir mesaj kutusu netleştirebilirsiniz "senin bağlamalarını kırar" diye, ya da var Bu konuyla ilgili başka bir soru başlatıldı mı? – TheZenker

cevap

17

System.Windows.MessageBox eklenmiştir. Windows Forms ile birlikte

System.Windows.Forms.MessageBox eklenmiştir ve Windows Forms derlemeleri içinde bulunur.

Programınız bir Windows Forms programıysa, WPF'ye bağımlılık çekmeyeceği için ikincisini (System.Windows.Forms.MessageBox) kullanırdım. Öte yandan, WPF için geliştiriyorsanız, System.Windows.MessageBox kullanırdım.

+0

Cevabınız için teşekkürler! Ben bir WPF formu kullanıyorum ve System.Windows.MessageBox kullandığımda bu benim merakların bazı neden kırmak oldu merak ettim nedenlerinden biri. System.Windows.Forms.MessageBox'a geçtiğimde bağlarım sağlam kaldı. MessageBox’un bağlarıma aykırı olabilecek bazı uygulama özellikleri var mı? Teşekkürler – MisterXero

+0

@MisterXero: Hayır - hiç bir etkisi olmamalı. Bunun için ne yaptığınızı açıklayan başka bir soru sormak isteyebilirsiniz (kod örnekleri ile) ... –

2

Her ikisi de aynı şeyi yapar, system.windows.messagebox WPF ve system.windows.forms.messagebox Windows Forms'dır. WPF kullanıyorsanız, eskiyi kullanın, WinForms için ikincisini kullanın.

1

İkisi sonunda ... olarak bildiğim kadarıyla aynı düşük seviyede pencereler apı'sini

+0

İlginç ... system.windows.messagebox'ı kullandığımda, WPF formumda ancak system.windows üzerinde bir bağlayıcı kopuyor. forms.messagebox yapmaz. Bunu neden yaptığını biliyor musun? – MisterXero

+0

@MisterXero ile tam olarak ne demek istiyorsun? Tam adı kullanarak bir derleme başvurusu eklemek hiçbir şeyi kırmamalı. Her ikisi de, WPF uygulaması daha zarif olsa da, farklı ad alanlarında aynı şeyi yapan bir “UnsafeNativeMethods” sınıfına sahiptir. – mbx

8

bir diğer husus unutulmamalıdır:

Eğer bir uygulamada bir ileti kutusu görüntülemek istiyorsanız ne bir windows uygulaması veya bir form uygulaması (örneğin bir .NET konsolu uygulaması) oluşturur, internet üzerinden ortak mantra gibi görünmesi için montaj referanslarında sürüklememelisiniz.

Bunun yerine, kullanmalı ve şöyle User32 içine çağırır: önerildiği gibi, sizi

[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); 
+0

JFYI: WPF Sunum Çerçevesinden System.Windows.MessageBox, bu çağrının etrafındaki yönetilen bir sarıcıdır. WPF MessageBox aslında bir WPF penceresi değil. Yani, @stacy'nin önerdiği şeyi yapmaktan çekiniyorsanız, o rezervasyonları yaptırmayın. – jrwren

İlgili konular