| File: System\Windows\Forms\Design\ComponentEditorForm.ComponentEditorPageSite.cs | Web Access |
| Project: src\winforms\src\System.Windows.Forms\System.Windows.Forms.csproj (System.Windows.Forms) |
// Licensed to the .NET Foundation under one or more agreements. // The .NET Foundation licenses this file to you under the MIT license. using System.ComponentModel; using System.Reflection; namespace System.Windows.Forms.Design; public partial class ComponentEditorForm { /// <summary> /// Implements a standard version of ComponentEditorPageSite for use within a /// ComponentEditorForm. /// </summary> private sealed class ComponentEditorPageSite : IComponentEditorPageSite { internal IComponent _component; internal ComponentEditorPage _pageControl; internal Control _parent; internal bool _isActive; internal bool _isDirty; private readonly ComponentEditorForm _form; /// <summary> /// Creates the page site. /// </summary> internal ComponentEditorPageSite(Control parent, Type pageClass, IComponent component, ComponentEditorForm form) { _component = component; _parent = parent; _isActive = false; _isDirty = false; _form = form.OrThrowIfNull(); try { _pageControl = (ComponentEditorPage)Activator.CreateInstance(pageClass)!; } catch (TargetInvocationException e) { Debug.Fail(e.ToString()); throw new TargetInvocationException(string.Format(SR.ExceptionCreatingCompEditorControl, e), e.InnerException); } _pageControl.SetSite(this); _pageControl.SetComponent(component); } /// <summary> /// Called by the ComponentEditorForm to activate / deactivate the page. /// </summary> internal bool Active { set { if (value) { // make sure the page has been created _pageControl.CreateControl(); // activate it and give it focus _pageControl.Activate(); } else { _pageControl.Deactivate(); } _isActive = value; } } internal bool AutoCommit { get { return _pageControl.CommitOnDeactivate; } } internal bool Dirty { get { return _isDirty; } set { _isDirty = value; } } /// <summary> /// Called by a page to return a parenting control for itself. /// </summary> public Control GetControl() { return _parent; } /// <summary> /// Called by the ComponentEditorForm to get the actual page. /// </summary> internal ComponentEditorPage GetPageControl() { return _pageControl; } /// <summary> /// Called by a page to mark it's contents as dirty. /// </summary> public void SetDirty() { if (_isActive) { Dirty = true; } _form.SetDirty(); } } }