using System; using System.Collections.Generic; using System.ComponentModel; using System.Drawing; using System.Drawing.Design; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Windows.Forms; using static System.Windows.Forms.ComboBox; namespace DPumpHydr.WinFrmUI.WenSkin.Controls { public class WenLableComboBox : WenControl { public WenLableComboBox() { wenComboBox = new WenComboBox(); wenComboBox.SelectedIndexChanged += (s, e) => { base.Text = wenComboBox.Text; }; wenComboBox.TextChanged += (s, e) => { base.Text = wenComboBox.Text; }; wenComboBox.SizeChanged += (s, e) => { this.Height = wenComboBox.Height; }; this.Controls.Add(wenComboBox); } #region 私有属性 private WenComboBox wenComboBox; private string textLable; #endregion #region 公有属性 public override string Text { get => base.Text; set { base.Text = value; wenComboBox.Text = value; } } [Category("Wen"), Description("下拉选项组合功能")] [DefaultValue(typeof(ComboBoxStyle), "DropDown")] public ComboBoxStyle DropDownStyle { get => wenComboBox.DropDownStyle; set => wenComboBox.DropDownStyle = value; } [Category("Wen"), Description("标签显示文本内容")] public string TextLable { get => textLable; set { textLable = value; this.Invalidate(); SetLocationSize(); } } [DesignerSerializationVisibility(DesignerSerializationVisibility.Content)] [Editor("System.Windows.Forms.Design.ListControlStringCollectionEditor", typeof(UITypeEditor))] [Localizable(true)] [MergableProperty(false)] public ObjectCollection Items => wenComboBox.Items; #endregion private void SetLocationSize() { int w = TextRenderer.MeasureText(TextLable, this.Font).Width + 3; int h = (this.Height - wenComboBox.Height) / 2; wenComboBox.Location = new Point(w, h < 0 ? 0 : h); wenComboBox.Size = new Size(this.Width - w, (this.Height - wenComboBox.Height) / 2); } #region 重写事件 //保持控件宽度 protected override void SetBoundsCore(int x, int y, int width, int height, BoundsSpecified specified) { base.SetBoundsCore(x, y, width, wenComboBox.Height, specified); SetLocationSize(); } #endregion #region 重绘 protected override void WenOnPaint(Graphics g, Rectangle rec, PaintEventArgs e) { base.WenOnPaint(g, rec, e); this.DrawString(this.TextLable, g, rec); } #endregion public new void Focus() { wenComboBox.Focus(); } } }