Code:
/ FX-1434 / FX-1434 / 1.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;
///
///
///
/// Displays a
/// message box that can contain text, buttons, and symbols that
/// inform and instruct the
/// user.
///
///
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;
///
///
/// 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 //
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////
///
///
///
/// 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,bool displayHelpButton) {
return ShowCore(null, text, caption, buttons, icon, defaultButton, options, displayHelpButton);
}
///
///
///
/// Displays a message box with specified text, caption, style and Help file Path .
///
///
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 for a IWin32Window.
///
///
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, Help file Path and keyword.
///
///
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 for a IWin32Window.
///
///
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 HelpNavigator.
///
///
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 for IWin32Window.
///
///
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 ,HelpNavigator and object.
///
///
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 for a IWin32Window.
///
///
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, and style.
///
///
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 and caption.
///
///
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.
///
///
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, caption, and style.
///
///
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 and caption.
///
///
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.
///
///
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.
Link Menu

This book is available now!
Buy at Amazon US or
Buy at Amazon UK
- HtmlTableCell.cs
- FrameworkElementAutomationPeer.cs
- SHA384.cs
- XmlSerializerVersionAttribute.cs
- XPathQueryGenerator.cs
- SyntaxCheck.cs
- FamilyMapCollection.cs
- TextBounds.cs
- DataGridViewImageCell.cs
- XmlSchemaValidationException.cs
- DrawingContextDrawingContextWalker.cs
- _BaseOverlappedAsyncResult.cs
- WaveHeader.cs
- XsdBuilder.cs
- BitmapEffectOutputConnector.cs
- XslTransformFileEditor.cs
- XmlWriterSettings.cs
- FormDesigner.cs
- EpmAttributeNameBuilder.cs
- TimeoutValidationAttribute.cs
- ReadOnlyAttribute.cs
- CheckBoxList.cs
- Point3DCollectionValueSerializer.cs
- XamlStyleSerializer.cs
- PeerTransportElement.cs
- CryptoHandle.cs
- GlyphElement.cs
- ImageMapEventArgs.cs
- DesignBindingEditor.cs
- CorruptingExceptionCommon.cs
- QilVisitor.cs
- UnmanagedMemoryStream.cs
- ObjectStateManager.cs
- LogLogRecordEnumerator.cs
- Operator.cs
- TextRunProperties.cs
- BrowserDefinitionCollection.cs
- ButtonFlatAdapter.cs
- XamlFrame.cs
- SessionParameter.cs
- XmlArrayItemAttributes.cs
- HMACRIPEMD160.cs
- DrawingBrush.cs
- DataGridPagingPage.cs
- Subtree.cs
- NamespaceInfo.cs
- AppManager.cs
- Graph.cs
- ConstructorExpr.cs
- Bitmap.cs
- ComPersistableTypeElementCollection.cs
- StringWriter.cs
- FrameworkElementFactory.cs
- ProfileInfo.cs
- MessageFormatterConverter.cs
- ControlCollection.cs
- IpcManager.cs
- SatelliteContractVersionAttribute.cs
- UnsafeNativeMethods.cs
- LabelLiteral.cs
- SmtpTransport.cs
- GeometryModel3D.cs
- COM2AboutBoxPropertyDescriptor.cs
- WindowsProgressbar.cs
- BindingNavigator.cs
- EnumerableCollectionView.cs
- ProfileSettingsCollection.cs
- ByteAnimationBase.cs
- DataChangedEventManager.cs
- ListItemCollection.cs
- LineInfo.cs
- SQLUtility.cs
- CqlErrorHelper.cs
- DoubleAnimationClockResource.cs
- DeclarativeCatalogPart.cs
- SqlGatherProducedAliases.cs
- FixedSOMLineCollection.cs
- PermissionListSet.cs
- RuleSettingsCollection.cs
- SoundPlayerAction.cs
- XmlNamespaceMappingCollection.cs
- SecurityElement.cs
- TextElementCollection.cs
- AttributeUsageAttribute.cs
- InternalPolicyElement.cs
- MetadataSource.cs
- EmptyReadOnlyDictionaryInternal.cs
- CreateUserWizard.cs
- ListDesigner.cs
- ValidatorCollection.cs
- DrawItemEvent.cs
- DirectoryGroupQuery.cs
- ExcludePathInfo.cs
- LinearKeyFrames.cs
- HttpResponseBase.cs
- SmiEventSink_Default.cs
- EntityDataSourceDesigner.cs
- WebUtil.cs
- X509CertificateCollection.cs
- sqlstateclientmanager.cs