180 lines
		
	
	
		
			6.4 KiB
		
	
	
	
		
			C#
		
	
	
	
	
	
			
		
		
	
	
			180 lines
		
	
	
		
			6.4 KiB
		
	
	
	
		
			C#
		
	
	
	
	
	
#if FRAMEWORK20
 | 
						|
using System;
 | 
						|
using System.Text;
 | 
						|
using DevComponents.DotNetBar.Controls;
 | 
						|
using System.Windows.Forms.Design;
 | 
						|
using System.Collections;
 | 
						|
using DevComponents.DotNetBar.Rendering;
 | 
						|
using System.ComponentModel.Design;
 | 
						|
using System.Windows.Forms;
 | 
						|
using System.Drawing;
 | 
						|
using System.ComponentModel;
 | 
						|
using System.Runtime.InteropServices;
 | 
						|
 | 
						|
namespace DevComponents.DotNetBar.Design
 | 
						|
{
 | 
						|
    public class TextBoxDropDownDesigner : ControlDesigner
 | 
						|
    {
 | 
						|
        public override void InitializeNewComponent(IDictionary defaultValues)
 | 
						|
        {
 | 
						|
            base.InitializeNewComponent(defaultValues);
 | 
						|
            TextBoxDropDown control = this.Control as TextBoxDropDown;
 | 
						|
            control.BackgroundStyle.Class = ElementStyleClassKeys.TextBoxBorderKey;
 | 
						|
            control.ButtonDropDown.Visible = true;
 | 
						|
            control.Height = control.PreferredHeight;
 | 
						|
            control.Text = "";
 | 
						|
            control.Style = eDotNetBarStyle.StyleManagerControlled;
 | 
						|
        }
 | 
						|
 | 
						|
        public override SelectionRules SelectionRules
 | 
						|
        {
 | 
						|
            get
 | 
						|
            {
 | 
						|
                return (base.SelectionRules & ~(SelectionRules.BottomSizeable | SelectionRules.TopSizeable));
 | 
						|
            }
 | 
						|
        }
 | 
						|
 | 
						|
        protected override void PreFilterProperties(IDictionary properties)
 | 
						|
        {
 | 
						|
            base.PreFilterProperties(properties);
 | 
						|
            string[] ta = new string[] { "PasswordChar" };
 | 
						|
            Attribute[] aa = new Attribute[0];
 | 
						|
            for (int num1 = 0; num1 < ta.Length; num1++)
 | 
						|
            {
 | 
						|
                PropertyDescriptor desc = (PropertyDescriptor)properties[ta[num1]];
 | 
						|
                if (desc != null)
 | 
						|
                {
 | 
						|
                    properties[ta[num1]] = TypeDescriptor.CreateProperty(typeof(TextBoxDropDownDesigner), desc, aa);
 | 
						|
                }
 | 
						|
            }
 | 
						|
 | 
						|
            ta = new string[] { "Text" };
 | 
						|
            aa = new Attribute[0];
 | 
						|
            for (int num1 = 0; num1 < ta.Length; num1++)
 | 
						|
            {
 | 
						|
                PropertyDescriptor desc = (PropertyDescriptor)properties[ta[num1]];
 | 
						|
                if (desc != null)
 | 
						|
                {
 | 
						|
                    properties[ta[num1]] = TypeDescriptor.CreateProperty(typeof(TextBoxDropDownDesigner), desc, aa);
 | 
						|
                }
 | 
						|
            }
 | 
						|
 | 
						|
        }
 | 
						|
 | 
						|
        public void ResetText()
 | 
						|
        {
 | 
						|
            this.Control.Text = "";
 | 
						|
        }
 | 
						|
 | 
						|
        public bool ShouldSerializeText()
 | 
						|
        {
 | 
						|
            return TypeDescriptor.GetProperties(typeof(TextBoxDropDownDesigner))["Text"].ShouldSerializeValue(base.Component);
 | 
						|
        }
 | 
						|
 | 
						|
        public string Text
 | 
						|
        {
 | 
						|
            get
 | 
						|
            {
 | 
						|
                return this.Control.Text;
 | 
						|
            }
 | 
						|
            set
 | 
						|
            {
 | 
						|
                this.Control.Text = value;
 | 
						|
                ((TextBoxDropDown)this.Control).Select(0, 0);
 | 
						|
            }
 | 
						|
        }
 | 
						|
 | 
						|
        public char PasswordChar
 | 
						|
        {
 | 
						|
            get
 | 
						|
            {
 | 
						|
                TextBoxDropDown box1 = this.Control as TextBoxDropDown;
 | 
						|
                if (box1.UseSystemPasswordChar)
 | 
						|
                {
 | 
						|
                    box1.UseSystemPasswordChar = false;
 | 
						|
                    char ch1 = box1.PasswordChar;
 | 
						|
                    box1.UseSystemPasswordChar = true;
 | 
						|
                    return ch1;
 | 
						|
                }
 | 
						|
                return box1.PasswordChar;
 | 
						|
            }
 | 
						|
            set
 | 
						|
            {
 | 
						|
                TextBoxDropDown box1 = this.Control as TextBoxDropDown;
 | 
						|
                box1.PasswordChar = value;
 | 
						|
            }
 | 
						|
        }
 | 
						|
 | 
						|
        private DesignerActionListCollection m_ActionLists;
 | 
						|
        public override DesignerActionListCollection ActionLists
 | 
						|
        {
 | 
						|
            get
 | 
						|
            {
 | 
						|
                if (m_ActionLists == null)
 | 
						|
                {
 | 
						|
                    m_ActionLists = new DesignerActionListCollection();
 | 
						|
                    object o = this.GetType().Assembly.CreateInstance("System.Windows.Forms.Design.TextBoxActionList", false, System.Reflection.BindingFlags.NonPublic, null, new object[] { this }, null, null);
 | 
						|
                    if (o != null)
 | 
						|
                        m_ActionLists.Add(o as DesignerActionList);
 | 
						|
                }
 | 
						|
                return m_ActionLists;
 | 
						|
            }
 | 
						|
        }
 | 
						|
 | 
						|
        public override IList SnapLines
 | 
						|
        {
 | 
						|
            get
 | 
						|
            {
 | 
						|
                ArrayList sl = base.SnapLines as ArrayList;
 | 
						|
                int textBaseLine = GetTextBaseline(this.Control, ContentAlignment.TopLeft);
 | 
						|
                BorderStyle border = BorderStyle.FixedSingle;
 | 
						|
                if (border == BorderStyle.FixedSingle || border == BorderStyle.None)
 | 
						|
                {
 | 
						|
                    textBaseLine += 2;
 | 
						|
                }
 | 
						|
                else if (border == BorderStyle.Fixed3D)
 | 
						|
                {
 | 
						|
                    textBaseLine += 3;
 | 
						|
                }
 | 
						|
                sl.Add(new System.Windows.Forms.Design.Behavior.SnapLine(System.Windows.Forms.Design.Behavior.SnapLineType.Baseline, textBaseLine, System.Windows.Forms.Design.Behavior.SnapLinePriority.Medium));
 | 
						|
                return sl;
 | 
						|
            }
 | 
						|
        }
 | 
						|
 | 
						|
        private static int GetTextBaseline(Control ctrl, ContentAlignment alignment)
 | 
						|
        {
 | 
						|
            Rectangle clientRect = ctrl.ClientRectangle;
 | 
						|
            int ascent = 0;
 | 
						|
            int height = 0;
 | 
						|
            using (Graphics g = ctrl.CreateGraphics())
 | 
						|
            {
 | 
						|
                IntPtr hdc = g.GetHdc();
 | 
						|
                IntPtr hFont = ctrl.Font.ToHfont();
 | 
						|
                try
 | 
						|
                {
 | 
						|
                    IntPtr oldObject = WinApi.SelectObject(hdc, hFont);
 | 
						|
                    WinApi.TEXTMETRIC tm = new WinApi.TEXTMETRIC();
 | 
						|
                    WinApi.GetTextMetrics(new HandleRef(ctrl, hdc), tm);
 | 
						|
                    ascent = tm.tmAscent + 1;
 | 
						|
                    height = tm.tmHeight;
 | 
						|
                    WinApi.SelectObject(hdc, oldObject);
 | 
						|
                }
 | 
						|
                finally
 | 
						|
                {
 | 
						|
                    WinApi.DeleteObject(hFont);
 | 
						|
                    g.ReleaseHdc(hdc);
 | 
						|
                }
 | 
						|
            }
 | 
						|
            if ((alignment & (ContentAlignment.TopRight | ContentAlignment.TopCenter | ContentAlignment.TopLeft)) != (ContentAlignment)0)
 | 
						|
            {
 | 
						|
                return (clientRect.Top + ascent);
 | 
						|
            }
 | 
						|
            if ((alignment & (ContentAlignment.MiddleRight | ContentAlignment.MiddleCenter | ContentAlignment.MiddleLeft)) != (ContentAlignment)0)
 | 
						|
            {
 | 
						|
                return (((clientRect.Top + (clientRect.Height / 2)) - (height / 2)) + ascent);
 | 
						|
            }
 | 
						|
            return ((clientRect.Bottom - height) + ascent);
 | 
						|
        }
 | 
						|
    }
 | 
						|
}
 | 
						|
#endif |