带标签的输入框(LabeledTextBox)
这是一个左边带有标签页的输入框,标签页宽度根据标签内容自动调整。
public class LabeledTextBox : TextBox { [DllImport("user32.dll")] static extern IntPtr SendMessage(IntPtr hWnd, int msg, IntPtr wp, IntPtr lp); readonly Label label = new Label(); public LabeledTextBox() { this.label.BackColor = SystemColors.Control; //this.label.Cursor = Cursors.Default; //this.label.TextAlign = ContentAlignment.TopLeft; Controls.Add(this.label); } int LabelWidth() { return TextRenderer.MeasureText(this.label.Text, this.label.Font).Width; } public string LabelText { get { return this.label.Text; } set { this.label.Text = value; SendMessage(Handle, 0xd3, (IntPtr)1, (IntPtr)(LabelWidth() << 32)); OnResize(EventArgs.Empty); } } protected override void OnResize(EventArgs e) { base.OnResize(e); var labelWidth = LabelWidth(); //this.label.Left = ClientSize.Width - labelWidth; this.label.Left = 0; this.label.Top = (ClientSize.Height/2) - (this.label.Height/2); this.label.Width = labelWidth; this.label.Height = ClientSize.Height; } }