在鼠标上单击弹出的文本框,在图片框上添加自定义便笺到图片 [英] Popping up a TextBox on mouse click over a PictureBox for adding custom note to picture

查看:80
本文介绍了在鼠标上单击弹出的文本框,在图片框上添加自定义便笺到图片的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

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

In my C# winforms application, I have a picturebox which some bitmap images can be loaded into it. What I want to do is if user clicks somewhere within picturebox, at the mouse location a small textbox will be appeared and user can add a custom text (note) to the picture.

我知道如何将字符串写入位图文件,但是我找不到在鼠标位置弹出文本框的方法,并且当用户写东西并按Enter键时会自动将文本添加到图像中.该文本框及其属性应如何定义?

I know how to write a string into a bitmap file, but I couldnt find a way to POP UP a textbox at mouse location, and automaticly add the text to the image when user wrote something and hit enter key. How this textbox and its properties should be defined?

谢谢.

推荐答案

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

You could embed a control in a custom popup form, as shown below.

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

The last argument in the PopupForm constructor specifies the action to take, when the user presses Enter. In this example an anonymous method is specified, setting the title of the form.

用法

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();
  }
}

这篇关于在鼠标上单击弹出的文本框,在图片框上添加自定义便笺到图片的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆