Code:
/ DotNET / DotNET / 8.0 / untmp / whidbey / REDBITS / ndp / fx / src / Designer / WinForms / System / WinForms / Design / AnchorEditor.cs / 1 / AnchorEditor.cs
//------------------------------------------------------------------------------
//
// Copyright (c) Microsoft Corporation. All rights reserved.
//
//-----------------------------------------------------------------------------
/*
*/
namespace System.Windows.Forms.Design {
using System.Runtime.InteropServices;
using System.ComponentModel;
using System;
using System.ComponentModel.Design;
using Microsoft.Win32;
using System.Diagnostics;
using System.Diagnostics.CodeAnalysis;
using System.Drawing;
using System.Design;
using System.Drawing.Design;
using System.Windows.Forms;
using System.Windows.Forms.ComponentModel;
using System.Windows.Forms.Design;
///
///
/// Provides a design-time editor for specifying the
///
/// property.
///
[SuppressMessage("Microsoft.Design", "CA1001:TypesThatOwnDisposableFieldsShouldBeDisposable")]
public sealed class AnchorEditor : UITypeEditor {
private AnchorUI anchorUI;
///
///
/// Edits the given object value using the editor style provided by
/// GetEditorStyle.
///
[SuppressMessage("Microsoft.Security", "CA2123:OverrideLinkDemandsShouldBeIdenticalToBase")] // everything in this assembly is full trust.
public override object EditValue(ITypeDescriptorContext context, IServiceProvider provider, object value) {
object returnValue = value;
if (provider != null) {
IWindowsFormsEditorService edSvc = (IWindowsFormsEditorService)provider.GetService(typeof(IWindowsFormsEditorService));
if (edSvc != null) {
if (anchorUI == null) {
anchorUI = new AnchorUI(this);
}
anchorUI.Start(edSvc, value);
edSvc.DropDownControl(anchorUI);
value = anchorUI.Value;
anchorUI.End();
}
}
return value;
}
///
///
/// Gets the editing style of the Edit method.
///
[SuppressMessage("Microsoft.Security", "CA2123:OverrideLinkDemandsShouldBeIdenticalToBase")] // everything in this assembly is full trust.
public override UITypeEditorEditStyle GetEditStyle(ITypeDescriptorContext context) {
return UITypeEditorEditStyle.DropDown;
}
///
///
/// User Interface for the AnchorEditor.
///
///
private class AnchorUI : Control {
private ContainerPlaceholder container = new ContainerPlaceholder();
private ControlPlaceholder control = new ControlPlaceholder();
private IWindowsFormsEditorService edSvc;
private SpringControl left;
private SpringControl right;
private SpringControl top;
private SpringControl bottom;
private SpringControl[] tabOrder;
private AnchorEditor editor = null;
private AnchorStyles oldAnchor;
private object value;
public AnchorUI(AnchorEditor editor) {
this.editor = editor;
this.left = new SpringControl( this );
this.right = new SpringControl( this );
this.top = new SpringControl( this );
this.bottom = new SpringControl( this );
tabOrder = new SpringControl[] { left, top, right, bottom};
InitializeComponent();
}
public object Value {
get {
return value;
}
}
public void End() {
edSvc = null;
value = null;
}
public virtual AnchorStyles GetSelectedAnchor() {
AnchorStyles baseVar = (AnchorStyles)0;
if (left.GetSolid()) {
baseVar |= AnchorStyles.Left;
}
if (top.GetSolid()) {
baseVar |= AnchorStyles.Top;
}
if (bottom.GetSolid()) {
baseVar |= AnchorStyles.Bottom;
}
if (right.GetSolid()) {
baseVar |= AnchorStyles.Right;
}
return baseVar;
}
internal virtual void InitializeComponent() {
int XBORDER = SystemInformation.Border3DSize.Width;
int YBORDER = SystemInformation.Border3DSize.Height;
SetBounds(0, 0, 90, 90);
AccessibleName = SR.GetString(SR.AnchorEditorAccName);
container.Location = new Point(0, 0);
container.Size = new Size(90, 90);
container.Anchor = AnchorStyles.Top | AnchorStyles.Left | AnchorStyles.Bottom | AnchorStyles.Right;
control.Location = new Point(30, 30);
control.Size = new Size(30, 30);
control.Anchor = AnchorStyles.Top | AnchorStyles.Left | AnchorStyles.Bottom | AnchorStyles.Right;
right.Location = new Point(60, 40);
right.Size = new Size(30 - XBORDER, 10);
right.TabIndex = 2;
right.TabStop = true;
right.Anchor = AnchorStyles.Right;
right.AccessibleName = SR.GetString(SR.AnchorEditorRightAccName);
left.Location = new Point(XBORDER, 40);
left.Size = new Size(30 - XBORDER, 10);
left.TabIndex = 0;
left.TabStop = true;
left.Anchor = AnchorStyles.Left;
left.AccessibleName = SR.GetString(SR.AnchorEditorLeftAccName);
top.Location = new Point(40, YBORDER);
top.Size = new Size(10, 30 - YBORDER);
top.TabIndex = 1;
top.TabStop = true;
top.Anchor = AnchorStyles.Top;
top.AccessibleName = SR.GetString(SR.AnchorEditorTopAccName);
bottom.Location = new Point(40, 60);
bottom.Size = new Size(10, 30 - YBORDER);
bottom.TabIndex = 3;
bottom.TabStop = true;
bottom.Anchor = AnchorStyles.Bottom;
bottom.AccessibleName = SR.GetString(SR.AnchorEditorBottomAccName);
Controls.Clear();
Controls.AddRange(new Control[]{
container});
container.Controls.Clear();
container.Controls.AddRange(new Control[]{
control,
top,
left,
bottom,
right});
}
protected override void OnGotFocus(EventArgs e) {
base.OnGotFocus(e);
top.Focus();
}
private void SetValue() {
value = GetSelectedAnchor();
}
public void Start(IWindowsFormsEditorService edSvc, object value) {
this.edSvc = edSvc;
this.value = value;
if (value is AnchorStyles) {
left.SetSolid((((AnchorStyles)value) & AnchorStyles.Left) == AnchorStyles.Left);
top.SetSolid((((AnchorStyles)value) & AnchorStyles.Top) == AnchorStyles.Top);
bottom.SetSolid((((AnchorStyles)value) & AnchorStyles.Bottom) == AnchorStyles.Bottom);
right.SetSolid((((AnchorStyles)value) & AnchorStyles.Right) == AnchorStyles.Right);
oldAnchor = (AnchorStyles) value;
}
else {
oldAnchor = AnchorStyles.Top | AnchorStyles.Left;
}
}
private void Teardown( bool saveAnchor ) {
if (!saveAnchor) {
// restore the old settings if user pressed ESC
value = oldAnchor;
}
edSvc.CloseDropDown();
}
///
///
///
private class ContainerPlaceholder : Control {
public ContainerPlaceholder() {
this.BackColor = SystemColors.Window;
this.ForeColor = SystemColors.WindowText;
this.TabStop = false;
}
protected override void OnPaint(PaintEventArgs e) {
Rectangle rc = this.ClientRectangle;
ControlPaint.DrawBorder3D(e.Graphics, rc, Border3DStyle.Sunken);
}
}
///
///
///
private class ControlPlaceholder : Control {
public ControlPlaceholder() {
this.BackColor = SystemColors.Control;
this.TabStop = false;
this.SetStyle( ControlStyles.Selectable, false );
}
protected override void OnPaint(PaintEventArgs e) {
Rectangle rc = this.ClientRectangle;
ControlPaint.DrawButton(e.Graphics, rc, ButtonState.Normal);
}
}
///
///
///
private class SpringControl : Control {
internal bool solid;
internal bool focused;
private AnchorUI picker;
public SpringControl( AnchorUI picker ) {
if (picker == null)
throw new ArgumentException();
this.picker = picker;
this.TabStop = true;
}
protected override AccessibleObject CreateAccessibilityInstance() {
return new SpringControlAccessibleObject(this);
}
public virtual bool GetSolid() {
return solid;
}
protected override void OnGotFocus(EventArgs e) {
if (!focused) {
focused = true;
this.Invalidate();
}
base.OnGotFocus(e);
}
protected override void OnLostFocus(EventArgs e) {
if (focused) {
focused = false;
this.Invalidate();
}
base.OnLostFocus(e);
}
protected override void OnMouseDown(MouseEventArgs e) {
SetSolid(!solid);
Focus();
}
protected override void OnPaint(PaintEventArgs e) {
Rectangle rc = this.ClientRectangle;
if (solid) {
e.Graphics.FillRectangle(SystemBrushes.ControlDark, rc);
e.Graphics.DrawRectangle(SystemPens.WindowFrame, rc.X, rc.Y, rc.Width - 1, rc.Height - 1);
}
else {
ControlPaint.DrawFocusRectangle(e.Graphics, rc);
}
if (focused) {
rc.Inflate(-2, -2);
ControlPaint.DrawFocusRectangle(e.Graphics, rc);
}
}
protected override bool ProcessDialogChar(char charCode) {
if (charCode == ' ') {
SetSolid(!solid);
return true;
}
return base.ProcessDialogChar(charCode);
}
protected override bool ProcessDialogKey(Keys keyData) {
if ((keyData & Keys.KeyCode) == Keys.Return && (keyData & (Keys.Alt | Keys.Control)) == 0) {
picker.Teardown(true);
return true;
}
else if ((keyData & Keys.KeyCode) == Keys.Escape && (keyData & (Keys.Alt | Keys.Control)) == 0) {
picker.Teardown(false);
return true;
}
else if ((keyData & Keys.KeyCode) == Keys.Tab && (keyData & (Keys.Alt | Keys.Control)) == 0) {
for (int i = 0; i < picker.tabOrder.Length; i++) {
if (picker.tabOrder[i] == this) {
i += ((keyData & Keys.Shift) == 0 ? 1 : -1);
i = (i < 0 ? i + picker.tabOrder.Length : i % picker.tabOrder.Length);
picker.tabOrder[i].Focus();
break;
}
}
return true;
}
return base.ProcessDialogKey(keyData);
}
public virtual void SetSolid(bool value) {
if (solid != value) {
solid = value;
picker.SetValue();
this.Invalidate();
}
}
private class SpringControlAccessibleObject : ControlAccessibleObject {
public SpringControlAccessibleObject(SpringControl owner) : base(owner) {
}
public override AccessibleStates State {
get {
AccessibleStates state = base.State;
if (((SpringControl)Owner).GetSolid()) {
state |= AccessibleStates.Selected;
}
return state;
}
}
}
}
}
}
}
// 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
- ProfileGroupSettingsCollection.cs
- RadioButtonFlatAdapter.cs
- ADMembershipUser.cs
- Rectangle.cs
- TableAutomationPeer.cs
- WSHttpTransportSecurityElement.cs
- MaterialGroup.cs
- CodeTypeParameterCollection.cs
- PenLineCapValidation.cs
- DocumentPaginator.cs
- ScriptManagerProxy.cs
- CodeNamespaceImport.cs
- PackagePart.cs
- AssemblyResourceLoader.cs
- Stack.cs
- RemoteWebConfigurationHost.cs
- WmlMobileTextWriter.cs
- ConstraintStruct.cs
- TextParaLineResult.cs
- TextSelectionHelper.cs
- RuntimeTransactionHandle.cs
- ResourcePropertyMemberCodeDomSerializer.cs
- X509Utils.cs
- SimpleApplicationHost.cs
- FileNotFoundException.cs
- SrgsRuleRef.cs
- DataStreams.cs
- MaterialGroup.cs
- OLEDB_Util.cs
- FloaterBaseParaClient.cs
- TextRangeAdaptor.cs
- FrameworkTemplate.cs
- ExpressionList.cs
- HiddenField.cs
- TextServicesManager.cs
- ValidationEventArgs.cs
- ForwardPositionQuery.cs
- Int32Rect.cs
- GridErrorDlg.cs
- SystemColorTracker.cs
- HtmlHistory.cs
- Environment.cs
- DataGridViewCellStyleConverter.cs
- OdbcCommand.cs
- ImageMap.cs
- TraceUtility.cs
- ValueSerializer.cs
- AtomEntry.cs
- SingleAnimationBase.cs
- StrokeNodeEnumerator.cs
- CodeAttributeArgumentCollection.cs
- BindingValueChangedEventArgs.cs
- ControlPropertyNameConverter.cs
- odbcmetadatacolumnnames.cs
- FilterElement.cs
- Properties.cs
- UIElement3D.cs
- SyndicationItemFormatter.cs
- XmlSchemaAnnotation.cs
- IPHostEntry.cs
- DoubleAnimationBase.cs
- SoapIgnoreAttribute.cs
- Rotation3D.cs
- CloseSequenceResponse.cs
- RegexCharClass.cs
- HandlerBase.cs
- StringFunctions.cs
- TargetControlTypeAttribute.cs
- TextChangedEventArgs.cs
- PropertyPath.cs
- ToolStripProgressBar.cs
- KeyInstance.cs
- CodeDirectiveCollection.cs
- ItemCheckEvent.cs
- Validator.cs
- TraceContextEventArgs.cs
- GlyphRun.cs
- WinInetCache.cs
- EntityContainerEntitySet.cs
- AttachedPropertyMethodSelector.cs
- LiteralLink.cs
- ListViewUpdateEventArgs.cs
- BaseTemplateCodeDomTreeGenerator.cs
- BridgeDataRecord.cs
- DataGridViewSelectedRowCollection.cs
- Recipient.cs
- DynamicUpdateCommand.cs
- KeyManager.cs
- Line.cs
- Unit.cs
- XmlSchemaSimpleContentRestriction.cs
- ImportContext.cs
- ReadWriteSpinLock.cs
- FieldAccessException.cs
- StringTraceRecord.cs
- CompilerResults.cs
- SqlLiftIndependentRowExpressions.cs
- MailAddressParser.cs
- XsltException.cs
- XPathSelfQuery.cs