using System;
|
using System.Collections;
|
using System.Collections.Generic;
|
using System.ComponentModel;
|
using System.Data;
|
using System.Drawing;
|
using System.Drawing.Design;
|
using System.Linq;
|
using System.Reflection;
|
using System.Runtime.InteropServices;
|
using System.Text;
|
using System.Windows.Forms;
|
|
namespace DPumpHydr.WinFrmUI.WenSkin.Controls
|
{
|
[Designer("WenSkin.Design.Designer.WenLableTextBoxDesigner")]
|
public class WenLableTextBox : WenControl
|
{
|
public WenLableTextBox() : base()
|
{
|
InitializeComponent();
|
}
|
private void InitializeComponent()
|
{
|
textBox = new WenTextBox
|
{
|
Dock = DockStyle.Fill,
|
};
|
textBox.TextChanged += (s, e) =>
|
{
|
//值改变事件
|
WenLableTextChangeEventArgs wenChoiceTextChangeEventArgs = new WenLableTextChangeEventArgs(beforeText, textBox.Text);
|
this.TextBeforeChanged?.Invoke(s, wenChoiceTextChangeEventArgs);
|
if (wenChoiceTextChangeEventArgs.State)
|
{
|
beforeText = textBox.Text;
|
this.Text = textBox.Text;
|
}
|
else
|
textBox.Text = beforeText;
|
};
|
|
button = new WenButton()
|
{
|
Size = new Size(20, textBox.Height),
|
Dock = DockStyle.Right,
|
Image = Properties.Resources.edit,
|
ImageSize = new Size(16, 16)
|
};
|
button.Click += Button_Click;
|
|
label = new Label
|
{
|
TextAlign = System.Drawing.ContentAlignment.MiddleLeft,
|
Dock = DockStyle.Left,
|
Size = new Size(0, 0)
|
};
|
|
|
this.Controls.Add(textBox);
|
this.Controls.Add(label);
|
this.Controls.Add(button);
|
|
this.Size = new Size(200, this.Height);
|
}
|
|
private void Button_Click(object sender, EventArgs e)
|
{
|
this.textBox.Focus();
|
WenLableTextBoxButtonEventArgs args = new WenLableTextBoxButtonEventArgs() { Text = this.Text };
|
|
ButtonClick?.Invoke(this, args);
|
|
if (ShowTextBox && args.ShowTextBox)
|
{
|
WenSkin.Forms.WenForm form = new Forms.WenForm()
|
{
|
StartPosition = FormStartPosition.CenterScreen,
|
Size = new Size(500, 350),
|
Text = "文本输入框"
|
};
|
|
WenTextBox textBox = new WenTextBox()
|
{
|
Text = this.textBox.Text,
|
Dock = DockStyle.Fill,
|
Multiline = true,
|
PasswordChar = this.textBox.PasswordChar,
|
ReadOnly = this.textBox.ReadOnly,
|
ScrollBars = ScrollBars.Both,
|
WordWrap = false
|
};
|
|
WenButton button = new WenButton()
|
{
|
Text = "确定",
|
Dock = DockStyle.Bottom,
|
};
|
button.Click += (s, ex) =>
|
{
|
this.textBox.Text = textBox.Text;
|
form.Dispose();
|
};
|
|
form.Controls.Add(textBox);
|
form.Controls.Add(button);
|
form.ShowDialog();
|
}
|
}
|
|
#region 私有属性
|
|
private WenTextBox textBox;
|
private WenButton button;
|
private Label label;
|
|
private string beforeText;
|
|
private bool password = false;
|
#endregion
|
|
#region 委托事件
|
|
[Category("Wen"), Description("按钮点击事件")]
|
public event WenChoiceTextBoxButtonEventHandler ButtonClick;
|
|
[Category("Wen"), Description("值改变前事件")]
|
public event WenChoiceTextChangeEventHandler TextBeforeChanged;
|
#endregion
|
|
#region 公有属性
|
|
public override Font Font { get => base.Font; set { textBox.Font = value; base.Font = value; } }
|
|
[AmbientValue(""), Category("Wen"), Description("标签显示文本内容")]
|
public string TextLable
|
{
|
get => label.Text;
|
set
|
{
|
label.Text = value;
|
label.Size = new Size(TextRenderer.MeasureText(TextLable, this.Font).Width, this.Height);
|
}
|
}
|
|
[DefaultValue(true), AmbientValue(true), Category("Wen"), Description("点击按钮是否弹出输入框")]
|
[RefreshProperties(RefreshProperties.Repaint)]
|
public bool ShowTextBox { get; set; } = true;
|
|
[DesignerSerializationVisibility(DesignerSerializationVisibility.Visible)]
|
[Category("Wen")]
|
[Description("标签文本显示")]
|
[Browsable(true)]
|
[Bindable(true)]
|
[EditorBrowsable(EditorBrowsableState.Always)]
|
[RefreshProperties(RefreshProperties.Repaint)]
|
public new string Text
|
{
|
get => textBox.Text;
|
set
|
{
|
textBox.Text = value;
|
base.Text = value;
|
if (beforeText == null)
|
beforeText = value;
|
}
|
}
|
|
[DefaultValue(false)]
|
[RefreshProperties(RefreshProperties.Repaint)]
|
[Category("Wen")]
|
[Description("是否可输入状态")]
|
[DesignerSerializationVisibility(DesignerSerializationVisibility.Visible)]
|
public bool ReadOnly { get => textBox.ReadOnly; set => textBox.ReadOnly = value; }
|
|
[DefaultValue(false), AmbientValue(false), Category("Wen"), Description("是否用●掩盖字符")]
|
[RefreshProperties(RefreshProperties.Repaint)]
|
public bool Password
|
{
|
get => this.password;
|
set
|
{
|
password = value;
|
if (value)
|
{
|
textBox.PasswordChar = '●';
|
}
|
else
|
{
|
textBox.PasswordChar = '\0';
|
}
|
}
|
}
|
|
[DefaultValue(true), AmbientValue(true), Category("Wen"), Description("是否显示按钮")]
|
public bool ButtonVisible { get => button.Visible; set => button.Visible = value; }
|
|
[Category("Wen"), Description("是否开启下拉搜索框"), DefaultValue(false)]
|
public bool StateComDown { get => textBox.StateComDown; set => textBox.StateComDown = value; }
|
|
[DesignerSerializationVisibility(DesignerSerializationVisibility.Content)]
|
[Editor("System.Windows.Forms.Design.ListControlStringCollectionEditor", typeof(UITypeEditor))]
|
public AutoCompleteStringCollection AutoCompleteCustomSource { get => textBox.AutoCompleteCustomSource; set => textBox.AutoCompleteCustomSource = value; }
|
|
[Category("Wen"), Description("按钮图标"), DefaultValue(false)]
|
public Image Image { get => button.Image; set => button.Image = value; }
|
#endregion
|
|
#region 重写事件
|
|
//保持控件宽度
|
protected override void SetBoundsCore(int x, int y, int width, int height, BoundsSpecified specified)
|
{
|
base.SetBoundsCore(x, y, width, textBox.Height, specified);
|
}
|
|
#endregion
|
|
public new void Focus()
|
{
|
textBox.Focus();
|
}
|
}
|
|
}
|