| File: System\Windows\Forms\Design\TextBoxDesigner.cs | Web Access |
| Project: src\winforms\src\System.Windows.Forms.Design\src\System.Windows.Forms.Design.csproj (System.Windows.Forms.Design) |
// Licensed to the .NET Foundation under one or more agreements. // The .NET Foundation licenses this file to you under the MIT license. using System.Collections; using System.ComponentModel; using System.ComponentModel.Design; namespace System.Windows.Forms.Design; /// <summary> /// Provides a designer for TextBox. /// </summary> internal class TextBoxDesigner : TextBoxBaseDesigner { private char _passwordChar; private DesignerActionListCollection? _actionLists; public override DesignerActionListCollection ActionLists { get { if (_actionLists is null) { _actionLists = new DesignerActionListCollection(); _actionLists.Add(new TextBoxActionList(this)); } return _actionLists; } } /// <summary> /// Allows a designer to filter the set of properties /// the component it is designing will expose through the /// TypeDescriptor object. This method is called /// immediately before its corresponding "Post" method. /// If you are overriding this method you should call /// the base implementation before you perform your own /// filtering. /// </summary> protected override void PreFilterProperties(IDictionary properties) { base.PreFilterProperties(properties); PropertyDescriptor? prop; string[] shadowProps = [ "PasswordChar" ]; Attribute[] empty = []; for (int i = 0; i < shadowProps.Length; i++) { prop = (PropertyDescriptor?)properties[shadowProps[i]]; if (prop is not null) { properties[shadowProps[i]] = TypeDescriptor.CreateProperty(typeof(TextBoxDesigner), prop, empty); } } } /// <summary> /// Shadows the PasswordChar. UseSystemPasswordChar overrides PasswordChar so independent on the value /// of PasswordChar it will return the system password char. However, the value of PasswordChar is /// cached so if UseSystemPasswordChar is reset at design time the PasswordChar value can be restored. /// So in the case both properties are set, we need to serialize the real PasswordChar value as well. /// </summary> private char PasswordChar { get { TextBox tb = (Control as TextBox)!; Debug.Assert(tb is not null, "Designed control is not a TextBox."); if (tb.UseSystemPasswordChar) { return _passwordChar; } else { return tb.PasswordChar; } } set { TextBox tb = (Control as TextBox)!; Debug.Assert(tb is not null, "Designed control is not a TextBox."); _passwordChar = value; tb.PasswordChar = value; } } }