WinForms 文本框是否具有使嵌入按钮成为可能的任何属性,在框的末尾?
类似于 Chrome 地址框中的收藏夹按钮:
我在一些 Excel 表格中也看到类似下面的内容:
编辑
我按照 Hans Passant 的回答添加了一个点击事件处理程序,它似乎工作正常:
protected override void OnLoad(EventArgs e) {
var btn = new Button();
btn.Size = new Size(25, textBoxFolder.ClientSize.Height + 2);
btn.Location = new Point(textBoxFolder.ClientSize.Width - btn.Width, -1);
btn.Cursor = Cursors.Default;
btn.Image = Properties.Resources.arrow_diagright;
btn.Click += btn_Click;
textBoxFolder.Controls.Add(btn);
// Send EM_SETMARGINS to prevent text from disappearing underneath the button
SendMessage(textBoxFolder.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);
private void btn_Click(object sender, EventArgs e) {
MessageBox.Show("hello world");
}
最佳答案
获取 TextBox 内的按钮只需要将它添加到框的 Controls 集合中。您还需要做一些合理的事情来防止框内的文本在按钮下方消失;这需要一点点 pinvoke。像这样:
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);
我测试右边距时看起来像这样(应该选择更漂亮的位图):
关于c# - WinForms 文本框内的按钮,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15868817/