Удалить изображение из PictureBox в C # - PullRequest
7 голосов
/ 29 декабря 2010

как удалить изображение из графического окна, когда пользователь нажимает клавишу «del» ... Я не нахожу никаких событий нажатия клавиш или нажатия клавиш для PB.

    private void topRight_pbx_MouseClick(object sender, MouseEventArgs e)
          {
           imgSelected=true;

           //need to accept "delete"key from keyboard?

           topRight_pbx.Image = null;
            topRFile = "";

           }

Ответы [ 4 ]

4 голосов
/ 29 декабря 2010

Измените свой imgSelected на что-то вроде:

private PictureBox picSelected = null;

В вашем окне картинки нажмите на эту переменную для отправителя:

picSelected = (PictureBox)sender;

Затем нажмите клавишу формы или элемент управления, который имеетФокус вы запускаете код удаления изображения (Пример для формы):

private void Form1_KeyDown(object sender, KeyEventArgs e)
{
   if (e.KeyCode == Keys.Delete)
      picSelected.Image = null;
}
2 голосов
/ 29 декабря 2010

Это потому, что элемент управления PictureBox никогда не может получить фокус, а несфокусированные элементы управления не получают события ввода с клавиатуры.

Как показывает документация , событие KeyDown (и другие события, связанные с вводом с клавиатуры) помечены [BrowsableAttribute(false)], поскольку они не работают должным образом. Они не предназначены для подписки на ваш код.

Он похож на Label элемент управления - вы можете посмотреть на него, но он не выбирается и не может получить фокус.

Вам нужно будет найти другой способ указать пользователю, что он хочет удалить изображение, отображаемое в данный момент в элементе управления PictureBox.

1 голос
/ 25 января 2016

Для этого может быть другой способ: если вы рисуете в окне PictureBox и хотите очистить его:

Graphics g = Graphics.FromImage(this.pictureBox1.Image);
g.Clear(this.pictureBox1.BackColor);

После этого вы можете снова рисовать на элементе управления.

Я надеюсь, что это может кому-то помочь

1 голос
/ 29 декабря 2010

У меня была похожая проблема в одном из моих проектов.Я решил это, добавив текстовое поле за пределами экрана.Я выделяю текстовое поле, когда щелкаем определенные элементы управления, и использую текстовое поле для обработки ввода с клавиатуры.

PicureBox SelectedImage=null;

void Image_Click(object sender,...)
{
  SelectedImage=(PictureBox)sender;
  FocusProxy.Focus();
}

void FocusProxy_KeyDown(...)
{
  if(e.KeyData==...)
  {
       SelectedImage.Image=null;
       e.Handled=true;
  }
}
...