7
votes

Supprimer l'image de la boîte à images en C #

Comment supprimer une image à partir de la zone d'image lorsque l'utilisateur appuyez sur la touche "DEL" ... Je ne trouve aucun événement de clavier ou de clé pour PB. xxx


0 commentaires

4 Réponses :


2
votes

c'est parce que le contrôle Image ne peut jamais obtenir le focus et les contrôles non ciblés ne reçoivent pas d'événements d'entrée de clavier.

comme le Documentation montre , l'événement (et les autres événements liés à l'entrée du clavier) sont marqués avec [BrowshareTtribuer (Faux)] car ils ne fonctionnent pas comme prévu. Ils ne sont pas destinés à être abonnés à votre code.

Il est similaire à une étiquette Control-Vous pouvez le regarder, mais ce n'est pas sélectionnable et ne peut pas acquérir la mise au point.

Vous devrez trouver une autre façon pour l'utilisateur d'indiquer que (s) qu'il souhaite supprimer une image actuellement affichée dans un imagebox contrôle.


0 commentaires

4
votes

Changer votre IMGSelected en quelque chose comme: xxx pré>

sur votre imagebox, cliquez sur Définir cette variable sur l'expéditeur: p>

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


8 commentaires

Bien sûr, si vous avez plusieurs contrôles images , vous aurez toujours besoin d'une manière externe pour indiquer QUELLE SOITIONNE ONE est sélectionnée, de peur que l'utilisateur supprime par inadvertance la mauvaise image.


J'ai oublié les détails mais j'ai eu des problèmes avec cette approche. Je pense que c'est que la forme n'ait pas eu les événements clés dans certains cas. Et bien sûr, vous ne voulez que supprimer l'image si une image est sélectionnée et non une autre commande de texte où l'utilisateur veut simplement supprimer un caractère.


@Jorge: J'ai 4 boîte de pic dans mon formulaire, est-ce que cela gère la suppression de l'image sélectionnée ou je dois le gérer explicitement?


@Sisya: Si vous mettez le même code pour cliquer sur les 4 d'entre eux (soit en allant au gestionnaire de même clic ou à copier-coller), il fonctionnera pour tous, supprimant uniquement celui qui clique sur l'utilisateur. @CODEINCHAOS: Ajout de code pour concentrer une zone de texte masquée avec l'événement de clé à suivre pourrait résoudre ce problème;)


Je ne vois pas comment quiconque s'attend à ce que cela fonctionne correctement avec plusieurs boîtes d'images, ou pourquoi c'est la réponse acceptée. Le code fourni dans la question pour l'événement MouseClick supprime déjà l'image. De toute évidence, le but est de le faire avec le clavier. Mais comment allez-vous détecter quel imagebox L'utilisateur tente de supprimer l'image dans le moment où ils appuient sur la touche Del de leur clavier?


@Cody Grey: Il est stocké dans une variable PICSELLECTED, qui est sous forme de forme. Lorsque l'utilisateur clique sur la boîte à lettres, la variable est définie sur l'expéditeur, qui est la boîte à lettres elle-même.


@Jorge: Oui, votre solution nécessite donc que l'utilisateur clique sur sur la touche sur la photographie Tout d'abord, avant de pouvoir utiliser la touche Suppr. Sauf que dans le code affiché dans la question, l'événement MouseClick Image . Cela semble totalement redondant.


@Cody: En réalité, cliquez sur l'événement de la souris pour sélectionner la photo ... puis supprimer la photo sélectionnée ... Je voulais le mettre en événement de clé ... mais DINT SAVOIR Comment le gérer ainsi, le mettre en souris cliquez sur le texte ... Pardon



1
votes

J'ai eu un problème similaire dans l'un de mes projets. Je l'ai résolu en ajoutant une zone de texte hors écran. Je vous concentre sur la zone de texte lorsque certains contrôles sont cliqués et utilisez la zone de texte pour gérer l'entrée du clavier.

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 commentaires

1
votes

Une manière différente pour cela pourrait être: Si vous dessinez sur une boîte à images et que vous souhaitez l'effacer:

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


0 commentaires