Удалить изображение из 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);
после этого вы можете снова обратить на контроль.
Я надеюсь, что это может помочь кому-то