带标签的输入框(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;
    }
}

 

posted @ 2016-12-20 10:36  刀大人  阅读(1548)  评论(0编辑  收藏  举报