2010-12-29 27 views
5

cómo eliminar la imagen del cuadro de imagen cuando el usuario presiona la tecla "del" ... No encuentro ningún evento de pulsación de tecla o tecla para PB.Eliminar imagen de PictureBox en C#

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

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

      topRight_pbx.Image = null; 
      topRFile = ""; 

      } 

Respuesta

3

Cambiar la imgSelected a algo como:

private PictureBox picSelected = null; 

En el cuadro de imagen clic establecer esta variable al remitente:

picSelected = (PictureBox)sender; 

Luego, en el keydown de la forma o el control que tiene el foco se ejecuta el código de eliminación de imagen (Ejemplo de formulario):

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

Por supuesto, si tiene varios controles' PictureBox', usted todavía necesita alguna forma externa para indicar * cuál * particular está seleccionado, para que el usuario elimine inadvertidamente la imagen incorrecta. –

+0

Olvidé los detalles pero tuve algunos problemas con este enfoque. Creo que fue porque el formulario no obtuvo los eventos clave en algunos casos. Y, por supuesto, solo desea eliminar la imagen si se selecciona una imagen y no algún otro control de texto donde el usuario simplemente desea eliminar un carácter. – CodesInChaos

+0

@Jorge: Tengo 4 pic box en mi Formulario, ¿esto maneja la eliminación de la imagen seleccionada o tengo que manejarlo explícitamente? –

2

Eso es porque el control PictureBox nunca puede obtener el foco, y los controles no se centró no recibe eventos de entrada del teclado.

Como muestra el documentation, la KeyDown evento (y los otros eventos relacionados con la entrada de teclado) están marcados con [BrowsableAttribute(false)] porque no funcionan como se esperaba. No están destinados a ser suscritos por su código.

Es similar a un control Label; puede verlo, pero no es seleccionable y no puede adquirir el foco.

Deberá encontrar otra forma para que el usuario indique que desea eliminar una imagen que se muestra actualmente en un control PictureBox.

+1

1: Derecha, pero curiosamente no ocultaron evento 'PreviewKeyDown' ... – digEmAll

1

Tuve un problema similar en uno de mis proyectos. Lo resolví agregando un cuadro de texto fuera de la pantalla. Le doy enfoque al cuadro de texto cuando se hace clic en ciertos controles, y uso el cuadro de texto para manejar la entrada del teclado.

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

Una forma diferente de esto podría ser: Si está dibujando en un cuadro de imagen y desea desactivarla:

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

Después de que se puede dibujar de nuevo en el mando.

espero que esto puede ayudar a alguien

Cuestiones relacionadas