在鼠标单击PictureBox上时弹出TextBox,以便为图片添加自定义注释

在我的C#winforms应用程序中,我有一个可以将一些位图图像加载到其中的图片框。 我想要做的是,如果用户点击图片框中的某个位置,在鼠标位置会出现一个小文本框,用户可以在图片中添加自定义文本(注释)。

我知道如何将字符串写入位图文件,但我找不到在鼠标位置弹出文本框的方法,并在用户写入内容并按下回车键时自动将文本添加到图像中。 应如何定义此文本框及其属性?

谢谢。

您可以在自定义弹出窗体中嵌入控件,如下所示。

PopupForm构造函数中的最后一个参数指定当用户按Enter键时要执行的操作。 在此示例中,指定了匿名方法,设置表单的标题。

用法

private void pictureBox1_MouseUp(object sender, MouseEventArgs e) { // in this case we create a TextBox, but the // PopupForm can hold any type of control. TextBox textBox = new TextBox(); Point location = pictureBox1.PointToScreen(e.Location); PopupForm form = new PopupForm(textBox, location, () => this.Text = textBox.Text); form.Show(); } 

PopupForm类

 public class PopupForm : Form { private Action _onAccept; private Control _control; private Point _point; public PopupForm(Control control, int x, int y, Action onAccept) : this(control, new Point(x, y), onAccept) { } public PopupForm(Control control, Point point, Action onAccept) { if (control == null) throw new ArgumentNullException("control"); this.FormBorderStyle = FormBorderStyle.None; this.ShowInTaskbar = false; this.KeyPreview = true; _point = point; _control = control; _onAccept = onAccept; } protected override void OnLoad(EventArgs e) { base.OnLoad(e); this.Controls.Add(_control); _control.Location = new Point(0, 0); this.Size = _control.Size; this.Location = _point; } protected override void OnKeyDown(KeyEventArgs e) { base.OnKeyDown(e); if (e.KeyCode == Keys.Enter) { _onAccept(); this.Close(); } else if (e.KeyCode == Keys.Escape) { this.Close(); } } protected override void OnDeactivate(EventArgs e) { base.OnDeactivate(e); this.Close(); } } 

我想,您可以在鼠标单击时动态创建文本框并使用它的BringToFront()方法,以防万一不会出现在图片框上方。 当用户按Enter键时,处理此事件,从Textbox获取文本并在需要时删除。