Button inside a WinForms textbox

前端 未结 7 1115
没有蜡笔的小新
没有蜡笔的小新 2020-11-27 14:31

Do WinForms textboxes have any properties that make an embedded button, at the end of the box, possible?

Something like the favorites button on the Chrome address bo

7条回答
  •  春和景丽
    2020-11-27 15:01

    Getting the button inside the TextBox just requires adding it to the box' Controls collection. You'll also need to do something reasonable to prevent the text inside the box disappearing underneath the button; that requires a wee bit of pinvoke. Like this:

        protected override void OnLoad(EventArgs e) {
            var btn = new Button();
            btn.Size = new Size(25, textBox1.ClientSize.Height + 2);
            btn.Location = new Point(textBox1.ClientSize.Width - btn.Width, -1);
            btn.Cursor = Cursors.Default;
            btn.Image = Properties.Resources.star;
            textBox1.Controls.Add(btn);
            // Send EM_SETMARGINS to prevent text from disappearing underneath the button
            SendMessage(textBox1.Handle, 0xd3, (IntPtr)2, (IntPtr)(btn.Width << 16));
            base.OnLoad(e);  
        }
    
        [System.Runtime.InteropServices.DllImport("user32.dll")]
        private static extern IntPtr SendMessage(IntPtr hWnd, int msg, IntPtr wp, IntPtr lp);
    

    Looked like this while I tested the right margin (should have picked a prettier bitmap):

    enter image description here

提交回复
热议问题