Code:
/ DotNET / DotNET / 8.0 / untmp / whidbey / REDBITS / ndp / fx / src / WinForms / Managed / System / WinForms / MessageBox.cs / 1 / MessageBox.cs
//------------------------------------------------------------------------------ //// Copyright (c) Microsoft Corporation. All rights reserved. // //----------------------------------------------------------------------------- /* */ namespace System.Windows.Forms { using Microsoft.Win32; using System; using System.ComponentModel; using System.Diagnostics; using System.Drawing; using System.Runtime.Remoting; using System.Runtime.InteropServices; using System.Windows.Forms; using System.Collections; ////// /// public class MessageBox { private const int IDOK = 1; private const int IDCANCEL = 2; private const int IDABORT = 3; private const int IDRETRY = 4; private const int IDIGNORE = 5; private const int IDYES = 6; private const int IDNO = 7; private const int HELP_BUTTON = 0x00004000; [ ThreadStatic ] private static HelpInfo[] helpInfoTable; ////// Displays a /// message box that can contain text, buttons, and symbols that /// inform and instruct the /// user. /// ////// /// This constructor is private so people aren't tempted to try and create /// instances of these -- they should just use the static show /// methods. /// private MessageBox() { } private static DialogResult Win32ToDialogResult(int value) { switch (value) { case IDOK: return DialogResult.OK; case IDCANCEL: return DialogResult.Cancel; case IDABORT: return DialogResult.Abort; case IDRETRY: return DialogResult.Retry; case IDIGNORE: return DialogResult.Ignore; case IDYES: return DialogResult.Yes; case IDNO: return DialogResult.No; default: return DialogResult.No; } } internal static HelpInfo HelpInfo { get { // unfortunately, there's no easy way to obtain handle of a message box. // we'll have to rely on the fact that modal message loops have to pop off in an orderly way. if (helpInfoTable != null && helpInfoTable.Length > 0) { // the top of the stack is actually at the end of the array. return helpInfoTable[helpInfoTable.Length - 1]; } return null; } } private static void PopHelpInfo() { // we roll our own stack here because we want a pretty lightweight implementation. // usually there's only going to be one message box shown at a time. But if // someone shows two message boxes (say by launching them via a WM_TIMER message) // we've got to gracefully handle the current help info. if (helpInfoTable == null) { Debug.Fail("Why are we being called when there's nothing to pop?"); } else { if (helpInfoTable.Length == 1) { helpInfoTable = null; } else { int newCount = helpInfoTable.Length -1; HelpInfo[] newTable = new HelpInfo[newCount]; Array.Copy(helpInfoTable, newTable, newCount); helpInfoTable = newTable; } } } private static void PushHelpInfo(HelpInfo hpi) { // we roll our own stack here because we want a pretty lightweight implementation. // usually there's only going to be one message box shown at a time. But if // someone shows two message boxes (say by launching them via a WM_TIMER message) // we've got to gracefully handle the current help info. int lastCount = 0; HelpInfo[] newTable; if (helpInfoTable == null) { newTable = new HelpInfo[lastCount+1]; } else { // if we already have a table - allocate a new slot lastCount = helpInfoTable.Length; newTable = new HelpInfo[lastCount+1]; Array.Copy(helpInfoTable, newTable, lastCount); } newTable[lastCount] = hpi; helpInfoTable = newTable; } ///////////////////////////////////////////////////////////////////////////////////////////////////////////////// //START WHIDBEY ADDS // ///////////////////////////////////////////////////////////////////////////////////////////////////////////////// ////// /// public static DialogResult Show(string text, string caption, MessageBoxButtons buttons, MessageBoxIcon icon, MessageBoxDefaultButton defaultButton, MessageBoxOptions options,bool displayHelpButton) { return ShowCore(null, text, caption, buttons, icon, defaultButton, options, displayHelpButton); } ////// Displays a message box with specified text, caption, and style with Help Button. /// ////// /// public static DialogResult Show(string text, string caption, MessageBoxButtons buttons, MessageBoxIcon icon, MessageBoxDefaultButton defaultButton, MessageBoxOptions options, string helpFilePath) { HelpInfo hpi = new HelpInfo(helpFilePath); return ShowCore(null, text, caption, buttons, icon, defaultButton, options, hpi); } ////// Displays a message box with specified text, caption, style and Help file Path . /// ////// /// public static DialogResult Show(IWin32Window owner, string text, string caption, MessageBoxButtons buttons, MessageBoxIcon icon, MessageBoxDefaultButton defaultButton, MessageBoxOptions options, string helpFilePath) { HelpInfo hpi = new HelpInfo(helpFilePath); return ShowCore(owner, text, caption, buttons, icon, defaultButton, options, hpi); } ////// Displays a message box with specified text, caption, style and Help file Path for a IWin32Window. /// ////// /// public static DialogResult Show(string text, string caption, MessageBoxButtons buttons, MessageBoxIcon icon, MessageBoxDefaultButton defaultButton, MessageBoxOptions options, string helpFilePath, string keyword) { HelpInfo hpi = new HelpInfo(helpFilePath, keyword); return ShowCore(null, text, caption, buttons, icon, defaultButton, options, hpi); } ////// Displays a message box with specified text, caption, style, Help file Path and keyword. /// ////// /// public static DialogResult Show(IWin32Window owner, string text, string caption, MessageBoxButtons buttons, MessageBoxIcon icon, MessageBoxDefaultButton defaultButton, MessageBoxOptions options, string helpFilePath, string keyword) { HelpInfo hpi = new HelpInfo(helpFilePath, keyword); return ShowCore(owner, text, caption, buttons, icon, defaultButton, options, hpi); } ////// Displays a message box with specified text, caption, style, Help file Path and keyword for a IWin32Window. /// ////// /// public static DialogResult Show(string text, string caption, MessageBoxButtons buttons, MessageBoxIcon icon, MessageBoxDefaultButton defaultButton, MessageBoxOptions options,string helpFilePath, HelpNavigator navigator) { HelpInfo hpi = new HelpInfo(helpFilePath, navigator); return ShowCore(null, text, caption, buttons, icon, defaultButton, options, hpi); } ////// Displays a message box with specified text, caption, style, Help file Path and HelpNavigator. /// ////// /// public static DialogResult Show(IWin32Window owner, string text, string caption, MessageBoxButtons buttons, MessageBoxIcon icon, MessageBoxDefaultButton defaultButton, MessageBoxOptions options, string helpFilePath, HelpNavigator navigator) { HelpInfo hpi = new HelpInfo(helpFilePath, navigator); return ShowCore(owner, text, caption, buttons, icon, defaultButton, options, hpi); } ////// Displays a message box with specified text, caption, style, Help file Path and HelpNavigator for IWin32Window. /// ////// /// public static DialogResult Show(string text, string caption, MessageBoxButtons buttons, MessageBoxIcon icon, MessageBoxDefaultButton defaultButton, MessageBoxOptions options,string helpFilePath, HelpNavigator navigator, object param) { HelpInfo hpi = new HelpInfo(helpFilePath, navigator, param); return ShowCore(null, text, caption, buttons, icon, defaultButton, options, hpi); } ////// Displays a message box with specified text, caption, style, Help file Path ,HelpNavigator and object. /// ////// /// public static DialogResult Show(IWin32Window owner, string text, string caption, MessageBoxButtons buttons, MessageBoxIcon icon, MessageBoxDefaultButton defaultButton, MessageBoxOptions options, string helpFilePath, HelpNavigator navigator, object param) { HelpInfo hpi = new HelpInfo(helpFilePath, navigator, param); return ShowCore(owner, text, caption, buttons, icon, defaultButton, options, hpi); } ///////////////////////////////////////////////////////////////////////////////////////////////////////////////// //END ADD // ///////////////////////////////////////////////////////////////////////////////////////////////////////////////// ////// Displays a message box with specified text, caption, style, Help file Path ,HelpNavigator and object for a IWin32Window. /// ////// /// public static DialogResult Show(string text, string caption, MessageBoxButtons buttons, MessageBoxIcon icon, MessageBoxDefaultButton defaultButton, MessageBoxOptions options) { return ShowCore(null, text, caption, buttons, icon, defaultButton, options, false); } ////// Displays a message box with specified text, caption, and style. /// ////// /// public static DialogResult Show(string text, string caption, MessageBoxButtons buttons, MessageBoxIcon icon, MessageBoxDefaultButton defaultButton) { return ShowCore(null, text, caption, buttons, icon, defaultButton, 0, false); } ////// Displays a message box with specified text, caption, and style. /// ////// /// public static DialogResult Show(string text, string caption, MessageBoxButtons buttons, MessageBoxIcon icon) { return ShowCore(null, text, caption, buttons, icon, MessageBoxDefaultButton.Button1, 0, false); } ////// Displays a message box with specified text, caption, and style. /// ////// /// public static DialogResult Show(string text, string caption, MessageBoxButtons buttons) { return ShowCore(null, text, caption, buttons, MessageBoxIcon.None, MessageBoxDefaultButton.Button1, 0, false); } ////// Displays a message box with specified text, caption, and style. /// ////// /// public static DialogResult Show(string text, string caption) { return ShowCore(null, text, caption, MessageBoxButtons.OK, MessageBoxIcon.None, MessageBoxDefaultButton.Button1, 0, false); } ////// Displays a message box with specified text and caption. /// ////// /// public static DialogResult Show(string text) { return ShowCore(null, text, String.Empty, MessageBoxButtons.OK, MessageBoxIcon.None, MessageBoxDefaultButton.Button1, 0, false); } ////// Displays a message box with specified text. /// ////// /// public static DialogResult Show(IWin32Window owner, string text, string caption, MessageBoxButtons buttons, MessageBoxIcon icon, MessageBoxDefaultButton defaultButton, MessageBoxOptions options) { return ShowCore(owner, text, caption, buttons, icon, defaultButton, options, false); } ////// Displays a message box with specified text, caption, and style. /// ////// /// public static DialogResult Show(IWin32Window owner, string text, string caption, MessageBoxButtons buttons, MessageBoxIcon icon, MessageBoxDefaultButton defaultButton) { return ShowCore(owner, text, caption, buttons, icon, defaultButton, 0, false); } ////// Displays a message box with specified text, caption, and style. /// ////// /// public static DialogResult Show(IWin32Window owner, string text, string caption, MessageBoxButtons buttons, MessageBoxIcon icon) { return ShowCore(owner, text, caption, buttons, icon, MessageBoxDefaultButton.Button1, 0, false); } ////// Displays a message box with specified text, caption, and style. /// ////// /// public static DialogResult Show(IWin32Window owner, string text, string caption, MessageBoxButtons buttons) { return ShowCore(owner, text, caption, buttons, MessageBoxIcon.None, MessageBoxDefaultButton.Button1, 0, false); } ////// Displays a message box with specified text, caption, and style. /// ////// /// public static DialogResult Show(IWin32Window owner, string text, string caption) { return ShowCore(owner, text, caption, MessageBoxButtons.OK, MessageBoxIcon.None, MessageBoxDefaultButton.Button1, 0, false); } ////// Displays a message box with specified text and caption. /// ////// /// public static DialogResult Show(IWin32Window owner, string text) { return ShowCore(owner, text, String.Empty, MessageBoxButtons.OK, MessageBoxIcon.None, MessageBoxDefaultButton.Button1, 0, false); } private static DialogResult ShowCore(IWin32Window owner, string text, string caption, MessageBoxButtons buttons, MessageBoxIcon icon, MessageBoxDefaultButton defaultButton, MessageBoxOptions options, HelpInfo hpi) { DialogResult result = DialogResult.None; try { PushHelpInfo(hpi); result = ShowCore(owner, text, caption, buttons, icon, defaultButton, options, true); } finally { PopHelpInfo(); } return result; } private static DialogResult ShowCore(IWin32Window owner, string text, string caption, MessageBoxButtons buttons, MessageBoxIcon icon, MessageBoxDefaultButton defaultButton, MessageBoxOptions options, bool showHelp) { if (!ClientUtils.IsEnumValid(buttons, (int)buttons, (int)MessageBoxButtons.OK, (int)MessageBoxButtons.RetryCancel)){ throw new InvalidEnumArgumentException("buttons", (int)buttons, typeof(MessageBoxButtons)); } // valid values are 0x0 0x10 0x20 0x30 0x40, chop off the last 4 bits and check that it's between 0 and 4. if (!WindowsFormsUtils.EnumValidator.IsEnumWithinShiftedRange(icon, /*numBitsToShift*/4, /*min*/0x0,/*max*/0x4)) { throw new InvalidEnumArgumentException("icon", (int)icon, typeof(MessageBoxIcon)); } // valid values are 0x0 0x100, 0x200, chop off the last 8 bits and check that it's between 0 and 2. if (!WindowsFormsUtils.EnumValidator.IsEnumWithinShiftedRange(defaultButton, /*numBitsToShift*/8, /*min*/0x0,/*max*/0x2)) { throw new InvalidEnumArgumentException("defaultButton", (int)defaultButton, typeof(DialogResult)); } // options intentionally not verified because we don't expose all the options Win32 supports. if (!SystemInformation.UserInteractive && (options & (MessageBoxOptions.ServiceNotification | MessageBoxOptions.DefaultDesktopOnly)) == 0) { throw new InvalidOperationException(SR.GetString(SR.CantShowModalOnNonInteractive)); } if (owner != null && (options & (MessageBoxOptions.ServiceNotification | MessageBoxOptions.DefaultDesktopOnly)) != 0) { throw new ArgumentException(SR.GetString(SR.CantShowMBServiceWithOwner), "options"); } if (showHelp && (options & (MessageBoxOptions.ServiceNotification | MessageBoxOptions.DefaultDesktopOnly)) != 0) { throw new ArgumentException(SR.GetString(SR.CantShowMBServiceWithHelp), "options"); } IntSecurity.SafeSubWindows.Demand(); int style = (showHelp) ? HELP_BUTTON : 0; style |= (int) buttons | (int) icon | (int) defaultButton | (int) options; IntPtr handle = IntPtr.Zero; if (showHelp || ((options & (MessageBoxOptions.ServiceNotification | MessageBoxOptions.DefaultDesktopOnly)) == 0)) { if (owner == null) { handle = UnsafeNativeMethods.GetActiveWindow(); } else { handle = Control.GetSafeHandle(owner); } } IntPtr userCookie = IntPtr.Zero; if (Application.UseVisualStyles) { // Activate theming scope to get theming for controls at design time and when hosted in browser. // NOTE: If a theming context is already active, this call is very fast, so shouldn't be a perf issue. userCookie = UnsafeNativeMethods.ThemingScope.Activate(); } Application.BeginModalMessageLoop(); DialogResult result; try { result = Win32ToDialogResult(SafeNativeMethods.MessageBox(new HandleRef(owner, handle), text, caption, style)); } finally { Application.EndModalMessageLoop(); UnsafeNativeMethods.ThemingScope.Deactivate(userCookie); } // Right after the dialog box is closed, Windows sends WM_SETFOCUS back to the previously active control // but since we have disabled this thread main window the message is lost. So we have to send it again after // we enable the main window. // UnsafeNativeMethods.SendMessage(new HandleRef(owner, handle), NativeMethods.WM_SETFOCUS, 0, 0); return result; } } } // File provided for Reference Use Only by Microsoft Corporation (c) 2007. // Copyright (c) Microsoft Corporation. All rights reserved./// Displays a message box with specified text. /// ///
Link Menu
This book is available now!
Buy at Amazon US or
Buy at Amazon UK
- ItemsControlAutomationPeer.cs
- InsufficientMemoryException.cs
- Models.cs
- TextEditorThreadLocalStore.cs
- CompositeScriptReferenceEventArgs.cs
- EdmType.cs
- ConfigXmlElement.cs
- SystemKeyConverter.cs
- BaseDataListActionList.cs
- RegexNode.cs
- RenderData.cs
- InstanceOwnerQueryResult.cs
- MessageSecurityVersionConverter.cs
- LoginCancelEventArgs.cs
- MultiBindingExpression.cs
- WinFormsComponentEditor.cs
- ReadOnlyDataSourceView.cs
- ColorBuilder.cs
- DrawListViewItemEventArgs.cs
- PathFigureCollection.cs
- DocumentGridContextMenu.cs
- PartialArray.cs
- UInt64Converter.cs
- ColumnPropertiesGroup.cs
- TextPointerBase.cs
- FormatConvertedBitmap.cs
- StateValidator.cs
- MatrixKeyFrameCollection.cs
- MediaScriptCommandRoutedEventArgs.cs
- CookieParameter.cs
- SqlConnectionHelper.cs
- DataGridViewCellMouseEventArgs.cs
- Size.cs
- ReadOnlyCollection.cs
- TextBoxBaseDesigner.cs
- DefinitionBase.cs
- AuthenticationConfig.cs
- TransferRequestHandler.cs
- SmiTypedGetterSetter.cs
- DragEventArgs.cs
- DispatchChannelSink.cs
- XmlDocumentType.cs
- ChangePassword.cs
- DocumentPageViewAutomationPeer.cs
- EdmToObjectNamespaceMap.cs
- SqlAliasesReferenced.cs
- MLangCodePageEncoding.cs
- WsdlInspector.cs
- TextOnlyOutput.cs
- BitSet.cs
- SqlDataSourceQueryConverter.cs
- ControllableStoryboardAction.cs
- PrimitiveXmlSerializers.cs
- GPPOINTF.cs
- IndependentAnimationStorage.cs
- Line.cs
- FontDialog.cs
- FileClassifier.cs
- UniqueConstraint.cs
- XslVisitor.cs
- BuilderPropertyEntry.cs
- SqlCacheDependencyDatabaseCollection.cs
- EventDescriptor.cs
- DeviceContexts.cs
- TextInfo.cs
- Collection.cs
- TypedReference.cs
- StaticFileHandler.cs
- DoubleAverageAggregationOperator.cs
- TextParentUndoUnit.cs
- SchemaTypeEmitter.cs
- BindingExpressionBase.cs
- PrinterSettings.cs
- SiteMapNodeCollection.cs
- BaseDataBoundControlDesigner.cs
- userdatakeys.cs
- RepeatBehavior.cs
- PrintingPermission.cs
- WizardStepBase.cs
- DataServiceBehavior.cs
- QueryableDataSourceEditData.cs
- DbModificationClause.cs
- Library.cs
- TokenBasedSet.cs
- DisplayNameAttribute.cs
- TraceInternal.cs
- TrackingMemoryStream.cs
- SqlRecordBuffer.cs
- ControlDesignerState.cs
- XmlDataLoader.cs
- IndexerNameAttribute.cs
- ProfileGroupSettingsCollection.cs
- CaseStatementSlot.cs
- StrokeNodeOperations2.cs
- XmlSignificantWhitespace.cs
- HttpCachePolicy.cs
- TypeToken.cs
- GPRECTF.cs
- RadioButtonPopupAdapter.cs
- DataGridViewRowDividerDoubleClickEventArgs.cs