Удалить изображение из PictureBox в C#

Как удалить изображение из окна изображения, когда пользователь нажимает клавишу" del"...Я не нахожу никаких нажатий клавиш или событий keydown для 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 ответов


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

private PictureBox picSelected = null;

на вашем picturebox нажмите установить эту переменную отправителю:

picSelected = (PictureBox)sender;

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

private void Form1_KeyDown(object sender, KeyEventArgs e)
{
   if (e.KeyCode == Keys.Delete)
      picSelected.Image = null;
}

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

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

Это похоже на Label control-вы можете посмотреть на него, но он не выбирается и не могу сосредоточиться.

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


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

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

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

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

после этого вы можете снова обратить на контроль.

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