Code:
/ DotNET / DotNET / 8.0 / untmp / whidbey / REDBITS / ndp / fx / src / WinForms / Managed / System / WinForms / ArrangedElement.cs / 1 / ArrangedElement.cs
namespace System.Windows.Forms { using System.Drawing; using System.Windows.Forms.Layout; using System.Collections.Specialized; using System.Collections; using System.ComponentModel; using System.Diagnostics; internal abstract class ArrangedElement : Component, IArrangedElement { ////// ///private Rectangle bounds = Rectangle.Empty; private IArrangedElement parent = null; private BitVector32 state = new BitVector32(); private PropertyStore propertyStore = new PropertyStore(); // Contains all properties that are not always set. private int suspendCount = 0; private static readonly int stateVisible = BitVector32.CreateMask(); private static readonly int stateDisposing = BitVector32.CreateMask(stateVisible); private static readonly int stateLocked = BitVector32.CreateMask(stateDisposing); private static readonly int PropControlsCollection = PropertyStore.CreateKey(); private Control spacer = new Control(); internal ArrangedElement() { this.Padding = DefaultPadding; this.Margin = DefaultMargin; state[stateVisible] = true; } public Rectangle Bounds { get { return bounds; } } ArrangedElementCollection IArrangedElement.Children { get { return GetChildren(); } } IArrangedElement IArrangedElement.Container { get { return GetContainer(); } } protected virtual Padding DefaultMargin { get { return Padding.Empty; } } protected virtual Padding DefaultPadding { get { return Padding.Empty; } } public virtual Rectangle DisplayRectangle { get { Rectangle displayRectangle = this.Bounds; return displayRectangle; } } public abstract LayoutEngine LayoutEngine { get; } public Padding Margin { get { return CommonProperties.GetMargin(this); } set { Debug.Assert((value.Right >= 0 && value.Left >= 0 && value.Top >= 0 && value.Bottom >=0), "who's setting margin negative?"); value = LayoutUtils.ClampNegativePaddingToZero(value); if (Margin != value ) { CommonProperties.SetMargin(this, value); } } } public virtual Padding Padding { get { return CommonProperties.GetPadding(this, DefaultPadding); } set { Debug.Assert((value.Right >= 0 && value.Left >= 0 && value.Top >= 0 && value.Bottom >=0), "who's setting padding negative?"); value = LayoutUtils.ClampNegativePaddingToZero(value); if (Padding != value) { CommonProperties.SetPadding(this, value); } } } public virtual IArrangedElement Parent { get { return parent; } set { parent = value as IArrangedElement; } } public virtual bool ParticipatesInLayout { get { return Visible; } } PropertyStore IArrangedElement.Properties { get { return this.Properties; } } private PropertyStore Properties { get { return propertyStore; } } public virtual bool Visible { get { return state[stateVisible]; } set { if ( state[stateVisible] != value) { state[stateVisible] = value; if (Parent != null){ LayoutTransaction.DoLayout(this.Parent, this, PropertyNames.Visible); } } } } protected abstract IArrangedElement GetContainer(); protected abstract ArrangedElementCollection GetChildren(); public virtual Size GetPreferredSize(Size constrainingSize) { Size preferredSize = LayoutEngine.GetPreferredSize(this, constrainingSize - Padding.Size) + Padding.Size; return preferredSize; } public virtual void PerformLayout(IArrangedElement container, string propertyName) { if (suspendCount <= 0) { OnLayout(new LayoutEventArgs(container, propertyName)); } } protected virtual void OnLayout(LayoutEventArgs e) { bool parentNeedsLayout = LayoutEngine.Layout(this, e); } protected virtual void OnBoundsChanged(Rectangle oldBounds, Rectangle newBounds) { ((IArrangedElement)this).PerformLayout((IArrangedElement)this, PropertyNames.Size); } public void SetBounds(Rectangle bounds, BoundsSpecified specified) { // in this case the parent is telling us to refresh our bounds - dont // call PerformLayout SetBoundsCore(bounds, specified); } protected virtual void SetBoundsCore(Rectangle bounds, BoundsSpecified specified) { if (bounds != this.bounds) { Rectangle oldBounds = this.bounds; this.bounds = bounds; OnBoundsChanged(oldBounds, bounds); } } } } // 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
- ListViewContainer.cs
- KoreanCalendar.cs
- DecimalAnimationUsingKeyFrames.cs
- EdgeModeValidation.cs
- HtmlSelect.cs
- GradientSpreadMethodValidation.cs
- LogicalExpr.cs
- IFlowDocumentViewer.cs
- _BasicClient.cs
- BStrWrapper.cs
- SoapTypeAttribute.cs
- Int32.cs
- InputManager.cs
- XmlName.cs
- TCEAdapterGenerator.cs
- GridViewPageEventArgs.cs
- DXD.cs
- Byte.cs
- GlobalizationAssembly.cs
- ScrollItemPattern.cs
- SuppressMergeCheckAttribute.cs
- LineServicesCallbacks.cs
- DynamicExpression.cs
- TypeExtensionConverter.cs
- DetailsView.cs
- AtomContentProperty.cs
- basenumberconverter.cs
- MenuItemBinding.cs
- CriticalExceptions.cs
- QuadraticBezierSegment.cs
- SecurityContextTokenCache.cs
- ResourceContainer.cs
- GiveFeedbackEventArgs.cs
- AssemblyCache.cs
- EventEntry.cs
- ColumnHeader.cs
- ClonableStack.cs
- PTProvider.cs
- ServiceManager.cs
- MsmqChannelFactory.cs
- BooleanFacetDescriptionElement.cs
- EntityDataSourceContextCreatedEventArgs.cs
- ForeignKeyConstraint.cs
- EventEntry.cs
- ObfuscationAttribute.cs
- StickyNoteHelper.cs
- BasicHttpBinding.cs
- OletxTransactionManager.cs
- NullExtension.cs
- AbstractExpressions.cs
- ComUdtElement.cs
- DynamicObject.cs
- Border.cs
- WebPartMovingEventArgs.cs
- MobileControl.cs
- AsyncResult.cs
- FixedTextBuilder.cs
- EntityDataSourceValidationException.cs
- DataPager.cs
- PointHitTestResult.cs
- MenuStrip.cs
- ResourceIDHelper.cs
- DoubleLinkListEnumerator.cs
- OpCopier.cs
- VisualTarget.cs
- PackWebRequest.cs
- Slider.cs
- ConfigurationValues.cs
- DataSpaceManager.cs
- Size.cs
- BufferedGraphicsManager.cs
- DataObjectEventArgs.cs
- Matrix3DStack.cs
- ErrorFormatterPage.cs
- HashHelper.cs
- HtmlTableCell.cs
- X509Certificate.cs
- PeerName.cs
- PropertyPath.cs
- ParameterReplacerVisitor.cs
- DataDocumentXPathNavigator.cs
- TraceEventCache.cs
- RoutedUICommand.cs
- InvariantComparer.cs
- WindowsAltTab.cs
- EventDescriptor.cs
- FormViewRow.cs
- MouseWheelEventArgs.cs
- SystemInformation.cs
- _KerberosClient.cs
- ColorDialog.cs
- SchemaLookupTable.cs
- MailWriter.cs
- MultiDataTrigger.cs
- UIHelper.cs
- WebResponse.cs
- BinaryQueryOperator.cs
- EnumConverter.cs
- SmiEventSink_Default.cs
- WebPartConnectionsDisconnectVerb.cs