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.
4 Réponses :
c'est parce que le contrôle comme le Documentation montre , l'événement code> code> (et les autres événements liés à l'entrée du clavier) sont marqués avec Il est similaire à une étiquette code> code> Control-Vous pouvez le regarder, mais ce n'est pas sélectionnable et ne peut pas acquérir la mise au point. P>
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 Image code> 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. strong> p>
[BrowshareTtribuer (Faux)] code> car ils ne fonctionnent pas comme prévu. Ils ne sont pas destinés à être abonnés à votre code. P>
imagebox code> contrôle. p>
Changer votre IMGSelected en quelque chose comme: 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;
}
Bien sûr, si vous avez plusieurs contrôles code> images code>, vous aurez toujours besoin d'une manière externe pour indiquer QUELLE I> 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 code> MouseClick code> supprime déjà l'image. De toute évidence, le but est de le faire avec le clavier. Mais comment allez-vous détecter quel i> imagebox code> 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 i> sur la touche i> sur la photographie code> Tout d'abord, avant de pouvoir utiliser la touche Suppr. Sauf que dans le code affiché dans la question, l'événement code> MouseClick Mouseclick supprime déjà l'image de la section Image code>. 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
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; } }
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);