1

私のC#winformsアプリケーションには、いくつかのビットマップ画像をロードできるピクチャーボックスがあります。ユーザーが画像ボックス内のどこかをクリックすると、マウスの位置に小さなテキストボックスが表示され、ユーザーは画像にカスタムテキスト(メモ)を追加できます。

文字列をビットマップファイルに書き込む方法は知っていますが、マウスの位置にテキストボックスをポップアップ表示し、ユーザーが何かを書き込んでEnterキーを押すと、画像にテキストを自動的に追加する方法が見つかりませんでした。このテキストボックスとそのプロパティはどのように定義する必要がありますか?

ありがとう。

4

2 に答える 2

5

以下に示すように、カスタム ポップアップ フォームにコントロールを埋め込むことができます。

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();
  }
}
于 2011-04-05T09:05:09.707 に答える
0

マウスクリックで動的にテキストボックスを作成し、画像ボックスの上にが表示されない場合に備えて、BringToFront()メソッドを使用できると思います。ユーザーがEnterキーを押すと、このイベントを処理し、テキストボックスからテキストを取得し、必要に応じて削除します。

于 2011-04-05T08:35:36.417 に答える