Code:
/ Dotnetfx_Vista_SP2 / Dotnetfx_Vista_SP2 / 8.0.50727.4016 / DEVDIV / depot / DevDiv / releases / whidbey / NetFxQFE / ndp / fx / src / WinForms / Managed / System / WinForms / ContextMenu.cs / 1 / ContextMenu.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.InteropServices;
using System.Runtime.Remoting;
using System.Security;
using System.Security.Permissions;
///
///
/// This class is used to put context menus on your form and show them for
/// controls at runtime. It basically acts like a regular Menu control,
/// but can be set for the ContextMenu property that most controls have.
///
[
DefaultEvent("Popup"),
]
public class ContextMenu : Menu {
private EventHandler onPopup;
private EventHandler onCollapse;
internal Control sourceControl;
private RightToLeft rightToLeft = System.Windows.Forms.RightToLeft.Inherit;
///
///
/// Creates a new ContextMenu object with no items in it by default.
///
public ContextMenu()
: base(null) {
}
///
///
/// Creates a ContextMenu object with the given MenuItems.
///
public ContextMenu(MenuItem[] menuItems)
: base(menuItems) {
}
///
///
/// The last control that was acted upon that resulted in this context
/// menu being displayed.
/// VSWHIDBEY 426099 - add demand for AllWindows.
///
[
Browsable(false),
DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden),
SRDescription(SR.ContextMenuSourceControlDescr)
]
public Control SourceControl {
[UIPermission(SecurityAction.Demand, Window=UIPermissionWindow.AllWindows)]
get {
return sourceControl;
}
}
///
///
/// [To be supplied.]
///
[SRDescription(SR.MenuItemOnInitDescr)]
public event EventHandler Popup {
add {
onPopup += value;
}
remove {
onPopup -= value;
}
}
///
///
/// Fires when the context menu collapses.
///
[SRDescription(SR.ContextMenuCollapseDescr)]
public event EventHandler Collapse {
add {
onCollapse += value;
}
remove {
onCollapse -= value;
}
}
///
///
/// This is used for international applications where the language
/// is written from RightToLeft. When this property is true,
/// text alignment and reading order will be from right to left.
///
// VSWhidbey 164244: Add a DefaultValue attribute so that the Reset context menu becomes
// available in the Property Grid but the default value remains No.
[
Localizable(true),
DefaultValue(RightToLeft.No),
SRDescription(SR.MenuRightToLeftDescr)
]
public virtual RightToLeft RightToLeft {
get {
if (System.Windows.Forms.RightToLeft.Inherit == rightToLeft) {
if (sourceControl != null) {
return ((Control)sourceControl).RightToLeft;
}
else {
return RightToLeft.No;
}
}
else {
return rightToLeft;
}
}
set {
//valid values are 0x0 to 0x2.
if (!ClientUtils.IsEnumValid(value, (int)value, (int)RightToLeft.No, (int)RightToLeft.Inherit)){
throw new InvalidEnumArgumentException("RightToLeft", (int)value, typeof(RightToLeft));
}
if (RightToLeft != value) {
rightToLeft = value;
UpdateRtl((value == System.Windows.Forms.RightToLeft.Yes));
}
}
}
internal override bool RenderIsRightToLeft {
get {
return (rightToLeft == System.Windows.Forms.RightToLeft.Yes);
}
}
///
///
/// Fires the popup event
///
protected internal virtual void OnPopup(EventArgs e) {
if (onPopup != null) {
onPopup(this, e);
}
}
///
///
/// Fires the collapse event
///
protected internal virtual void OnCollapse(EventArgs e) {
if (onCollapse != null) {
onCollapse(this, e);
}
}
///
///
///
///
[
System.Security.Permissions.SecurityPermissionAttribute(System.Security.Permissions.SecurityAction.LinkDemand, Flags=System.Security.Permissions.SecurityPermissionFlag.UnmanagedCode),
System.Security.Permissions.SecurityPermissionAttribute(System.Security.Permissions.SecurityAction.InheritanceDemand, Flags=System.Security.Permissions.SecurityPermissionFlag.UnmanagedCode)
]
protected internal virtual bool ProcessCmdKey(ref Message msg, Keys keyData, Control control) {
sourceControl = control;
return ProcessCmdKey(ref msg, keyData);
}
private void ResetRightToLeft() {
RightToLeft = RightToLeft.No;
}
///
///
/// Returns true if the RightToLeft should be persisted in code gen.
///
internal virtual bool ShouldSerializeRightToLeft() {
if (System.Windows.Forms.RightToLeft.Inherit == rightToLeft) {
return false;
}
return true;
}
///
///
/// Displays the context menu at the specified position. This method
/// doesn't return until the menu is dismissed.
///
public void Show(Control control, Point pos) {
Show(control, pos, NativeMethods.TPM_VERTICAL | NativeMethods.TPM_RIGHTBUTTON);
}
///
///
/// Displays the context menu at the specified position. This method
/// doesn't return until the menu is dismissed.
///
public void Show(Control control, Point pos, LeftRightAlignment alignment) {
// This code below looks wrong but it's correct.
// WinForms Left alignment means we want the menu to show up left of the point it is invoked from.
// We specify TPM_RIGHTALIGN which tells win32 to align the right side of this
// menu with the point (which aligns it Left visually)
if (alignment == LeftRightAlignment.Left) {
Show(control, pos, NativeMethods.TPM_VERTICAL | NativeMethods.TPM_RIGHTBUTTON | NativeMethods.TPM_RIGHTALIGN);
}
else {
Show(control, pos, NativeMethods.TPM_VERTICAL | NativeMethods.TPM_RIGHTBUTTON | NativeMethods.TPM_LEFTALIGN);
}
}
private void Show(Control control, Point pos, int flags) {
if (control == null)
throw new ArgumentNullException("control");
if (!control.IsHandleCreated || !control.Visible)
throw new ArgumentException(SR.GetString(SR.ContextMenuInvalidParent), "control");
sourceControl = control;
OnPopup(EventArgs.Empty);
pos = control.PointToScreen(pos);
SafeNativeMethods.TrackPopupMenuEx(new HandleRef(this, Handle),
flags,
pos.X,
pos.Y,
new HandleRef(control, control.Handle),
null);
}
}
}
// File provided for Reference Use Only by Microsoft Corporation (c) 2007.
//------------------------------------------------------------------------------
//
// 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.InteropServices;
using System.Runtime.Remoting;
using System.Security;
using System.Security.Permissions;
///
///
/// This class is used to put context menus on your form and show them for
/// controls at runtime. It basically acts like a regular Menu control,
/// but can be set for the ContextMenu property that most controls have.
///
[
DefaultEvent("Popup"),
]
public class ContextMenu : Menu {
private EventHandler onPopup;
private EventHandler onCollapse;
internal Control sourceControl;
private RightToLeft rightToLeft = System.Windows.Forms.RightToLeft.Inherit;
///
///
/// Creates a new ContextMenu object with no items in it by default.
///
public ContextMenu()
: base(null) {
}
///
///
/// Creates a ContextMenu object with the given MenuItems.
///
public ContextMenu(MenuItem[] menuItems)
: base(menuItems) {
}
///
///
/// The last control that was acted upon that resulted in this context
/// menu being displayed.
/// VSWHIDBEY 426099 - add demand for AllWindows.
///
[
Browsable(false),
DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden),
SRDescription(SR.ContextMenuSourceControlDescr)
]
public Control SourceControl {
[UIPermission(SecurityAction.Demand, Window=UIPermissionWindow.AllWindows)]
get {
return sourceControl;
}
}
///
///
/// [To be supplied.]
///
[SRDescription(SR.MenuItemOnInitDescr)]
public event EventHandler Popup {
add {
onPopup += value;
}
remove {
onPopup -= value;
}
}
///
///
/// Fires when the context menu collapses.
///
[SRDescription(SR.ContextMenuCollapseDescr)]
public event EventHandler Collapse {
add {
onCollapse += value;
}
remove {
onCollapse -= value;
}
}
///
///
/// This is used for international applications where the language
/// is written from RightToLeft. When this property is true,
/// text alignment and reading order will be from right to left.
///
// VSWhidbey 164244: Add a DefaultValue attribute so that the Reset context menu becomes
// available in the Property Grid but the default value remains No.
[
Localizable(true),
DefaultValue(RightToLeft.No),
SRDescription(SR.MenuRightToLeftDescr)
]
public virtual RightToLeft RightToLeft {
get {
if (System.Windows.Forms.RightToLeft.Inherit == rightToLeft) {
if (sourceControl != null) {
return ((Control)sourceControl).RightToLeft;
}
else {
return RightToLeft.No;
}
}
else {
return rightToLeft;
}
}
set {
//valid values are 0x0 to 0x2.
if (!ClientUtils.IsEnumValid(value, (int)value, (int)RightToLeft.No, (int)RightToLeft.Inherit)){
throw new InvalidEnumArgumentException("RightToLeft", (int)value, typeof(RightToLeft));
}
if (RightToLeft != value) {
rightToLeft = value;
UpdateRtl((value == System.Windows.Forms.RightToLeft.Yes));
}
}
}
internal override bool RenderIsRightToLeft {
get {
return (rightToLeft == System.Windows.Forms.RightToLeft.Yes);
}
}
///
///
/// Fires the popup event
///
protected internal virtual void OnPopup(EventArgs e) {
if (onPopup != null) {
onPopup(this, e);
}
}
///
///
/// Fires the collapse event
///
protected internal virtual void OnCollapse(EventArgs e) {
if (onCollapse != null) {
onCollapse(this, e);
}
}
///
///
///
///
[
System.Security.Permissions.SecurityPermissionAttribute(System.Security.Permissions.SecurityAction.LinkDemand, Flags=System.Security.Permissions.SecurityPermissionFlag.UnmanagedCode),
System.Security.Permissions.SecurityPermissionAttribute(System.Security.Permissions.SecurityAction.InheritanceDemand, Flags=System.Security.Permissions.SecurityPermissionFlag.UnmanagedCode)
]
protected internal virtual bool ProcessCmdKey(ref Message msg, Keys keyData, Control control) {
sourceControl = control;
return ProcessCmdKey(ref msg, keyData);
}
private void ResetRightToLeft() {
RightToLeft = RightToLeft.No;
}
///
///
/// Returns true if the RightToLeft should be persisted in code gen.
///
internal virtual bool ShouldSerializeRightToLeft() {
if (System.Windows.Forms.RightToLeft.Inherit == rightToLeft) {
return false;
}
return true;
}
///
///
/// Displays the context menu at the specified position. This method
/// doesn't return until the menu is dismissed.
///
public void Show(Control control, Point pos) {
Show(control, pos, NativeMethods.TPM_VERTICAL | NativeMethods.TPM_RIGHTBUTTON);
}
///
///
/// Displays the context menu at the specified position. This method
/// doesn't return until the menu is dismissed.
///
public void Show(Control control, Point pos, LeftRightAlignment alignment) {
// This code below looks wrong but it's correct.
// WinForms Left alignment means we want the menu to show up left of the point it is invoked from.
// We specify TPM_RIGHTALIGN which tells win32 to align the right side of this
// menu with the point (which aligns it Left visually)
if (alignment == LeftRightAlignment.Left) {
Show(control, pos, NativeMethods.TPM_VERTICAL | NativeMethods.TPM_RIGHTBUTTON | NativeMethods.TPM_RIGHTALIGN);
}
else {
Show(control, pos, NativeMethods.TPM_VERTICAL | NativeMethods.TPM_RIGHTBUTTON | NativeMethods.TPM_LEFTALIGN);
}
}
private void Show(Control control, Point pos, int flags) {
if (control == null)
throw new ArgumentNullException("control");
if (!control.IsHandleCreated || !control.Visible)
throw new ArgumentException(SR.GetString(SR.ContextMenuInvalidParent), "control");
sourceControl = control;
OnPopup(EventArgs.Empty);
pos = control.PointToScreen(pos);
SafeNativeMethods.TrackPopupMenuEx(new HandleRef(this, Handle),
flags,
pos.X,
pos.Y,
new HandleRef(control, control.Handle),
null);
}
}
}
// File provided for Reference Use Only by Microsoft Corporation (c) 2007.
Link Menu

This book is available now!
Buy at Amazon US or
Buy at Amazon UK
- HandlerFactoryWrapper.cs
- SerializerDescriptor.cs
- PhysicalOps.cs
- SourceItem.cs
- DeclaredTypeValidator.cs
- HttpModule.cs
- Point.cs
- XPathDocumentBuilder.cs
- EntityTransaction.cs
- HyperLinkField.cs
- CacheManager.cs
- SafeNativeMethods.cs
- EventDescriptorCollection.cs
- CurrencyManager.cs
- FormViewDesigner.cs
- MemoryMappedFile.cs
- ActivityExecutorSurrogate.cs
- RijndaelCryptoServiceProvider.cs
- PanelStyle.cs
- Base64Decoder.cs
- Normalization.cs
- EncoderParameters.cs
- HotSpotCollectionEditor.cs
- ClientTargetCollection.cs
- TraversalRequest.cs
- DependencySource.cs
- serverconfig.cs
- PartialTrustVisibleAssembliesSection.cs
- RealProxy.cs
- RuntimeWrappedException.cs
- XmlSchemaDatatype.cs
- GridViewColumnCollectionChangedEventArgs.cs
- ElementNotEnabledException.cs
- MemberAccessException.cs
- DataGridViewBindingCompleteEventArgs.cs
- TypeDependencyAttribute.cs
- regiisutil.cs
- CachedTypeface.cs
- TextCompositionEventArgs.cs
- MemberHolder.cs
- ContentPlaceHolder.cs
- MobileTextWriter.cs
- SolidColorBrush.cs
- ByteArrayHelperWithString.cs
- BaseTemplateBuildProvider.cs
- _TLSstream.cs
- GatewayIPAddressInformationCollection.cs
- QuaternionRotation3D.cs
- IntSecurity.cs
- x509store.cs
- XmlArrayAttribute.cs
- CharAnimationUsingKeyFrames.cs
- CqlWriter.cs
- WebPartMinimizeVerb.cs
- RangeEnumerable.cs
- WebPart.cs
- CustomLineCap.cs
- SoapElementAttribute.cs
- RecordsAffectedEventArgs.cs
- VersionConverter.cs
- HttpModuleCollection.cs
- HttpResponseHeader.cs
- WsdlBuildProvider.cs
- SoapFormatter.cs
- StreamingContext.cs
- SQLResource.cs
- RegexParser.cs
- BitArray.cs
- SafeBitVector32.cs
- errorpatternmatcher.cs
- DataGridViewBindingCompleteEventArgs.cs
- CheckBoxList.cs
- WeakRefEnumerator.cs
- TablePatternIdentifiers.cs
- StringConcat.cs
- Renderer.cs
- DuplicateMessageDetector.cs
- BCLDebug.cs
- Set.cs
- StructureChangedEventArgs.cs
- Vector3DValueSerializer.cs
- WebServiceData.cs
- Byte.cs
- CommonProperties.cs
- EventLogPropertySelector.cs
- Int16Converter.cs
- TextParagraphView.cs
- CaseInsensitiveHashCodeProvider.cs
- XmlDataCollection.cs
- dsa.cs
- XamlRtfConverter.cs
- EndpointAddressMessageFilter.cs
- BinaryObjectReader.cs
- HtmlFormWrapper.cs
- ConnectionManagementElementCollection.cs
- CodeSnippetCompileUnit.cs
- FrameworkRichTextComposition.cs
- FlowLayoutPanelDesigner.cs
- TextTreeNode.cs
- SqlCachedBuffer.cs