comment changer l’image de contrôle sur une case à cocher

il a du texte, une image, puis la case à cocher,

Je souhaite utiliser une meilleure image pour la vérification, mais ne parviens pas à modifier les images cochées et non cochées.

this.checkBox1.CheckAlign = System.Drawing.ContentAlignment.MiddleRight; this.checkBox1.Checked = true; this.checkBox1.CheckState = System.Windows.Forms.CheckState.Checked; this.checkBox1.Image = global::ClientExam.Properties.Resources.action32; this.checkBox1.Location = new System.Drawing.Point(145, 140); this.checkBox1.Name = "checkBox1"; this.checkBox1.Size = new System.Drawing.Size(273, 127); this.checkBox1.TabIndex = 0; this.checkBox1.Text = "checkBox1"; this.checkBox1.TextImageRelation = System.Windows.Forms.TextImageRelation.TextBeforeImage; this.checkBox1.UseVisualStyleBackColor = true; 

Quelqu’un en sait-il qui ne nécessite pas que j’écrive mon propre contrôle?

    Si vous cherchez comment procéder dans Winforms, la solution consiste à créer une nouvelle classe de cases à cocher dérivée de CheckBox, puis à remplacer la méthode OnPaint .

    Voici un exemple de création de cases à cocher personnalisées en redéfinissant la méthode OnPaint :

     public class CustomCheckBox : CheckBox { public CustomCheckBox() { this.SetStyle(ControlStyles.UserPaint, true); this.SetStyle(ControlStyles.AllPaintingInWmPaint, true); } protected override void OnPaint(PaintEventArgs pevent) { base.OnPaint(pevent); if (this.Checked) { pevent.Graphics.FillRectangle(new SolidBrush(Color.Blue), new Rectangle(0, 0, 16, 16)); } else { pevent.Graphics.FillRectangle(new SolidBrush(Color.Red), new Rectangle(0, 0, 16, 16)); } } } 

    C’est très simple, mais cela vous donne une idée de base.

    Pour ceux qui préfèrent ne pas remplacer OnPaint, il existe une solution alternative:

    1. Ajoutez un contrôle ImageList et remplissez-le avec des images pour refléter les états cochés / non cochés.
    2. Définissez la propriété Appearance du contrôle de votre Checkbox sur Button (pour supprimer l’icône standard CheckBox).
    3. Définissez sa propriété FlatStyle sur Flat (pour que le contrôle ne ressemble pas vraiment à un bouton).
      Remarque: Vous pouvez également vérifier le groupe de propriétés ‘ FlatAppearance ‘. À savoir CheckedBackColor , MouseDownBackColor , MouseOverBackColor , c’est-à-dire les définir tous à Control valeur Control .
    4. Définissez la propriété ImageList du contrôle Checkbox sur le nom de votre contrôle ImageList .
    5. Définissez les propriétés Imageindex et ImageAlign du contrôle Checkbox pour refléter son état actuel.
    6. Le dernier et le plus important, définissez la propriété TextImageRelation du contrôle Checkbox (cette valeur ne laissera pas le texte et l’image se chevaucher sauf si vous le souhaitez). Ie valeur ImageBeforetext représente l’emplacement commun de l’icône CheckBox.

    Il ne rest maintenant qu’à modifier l’image lorsque l’état change, par exemple:

      private void chkMyCheckBoxWithAnImage_CheckedChanged(object sender, EventArgs e) { if (chkMyCheckBoxWithAnImage.Checked) chkMyCheckBoxWithAnImage.ImageIndex = 1; else chkMyCheckBoxWithAnImage.ImageIndex = 0; } 

    J’ai résolu ce problème différemment, j’utilise l’image d’arrière-plan et le centre, puis je modifie l’image principale chaque fois que l’option est cochée. cela semble que je le veux.

    Il y a un problème avec ceci, l’image d’arrière-plan si une taille inappropriée recouvre l’image de contrôle et elle ne semblerait donc pas correcte.

    la solution correcte est celle décrite par icemanind.

    Un simple:

    remplace la case à cocher OnPaint(PaintEventArgs e) comme ci-dessous:

     Graphics g = e.Graphics; base.OnPaint(e); //// Fill the background //SetControlSizes(); // Paint the outer rounded rectangle g.SmoothingMode = SmoothingMode.AntiAlias; using (GraphicsPath outerPath = GeneralUtilities.RoundedRectangle(mLabelRect, 1, 0)) { using (LinearGradientBrush outerBrush = new LinearGradientBrush(mLabelRect, mGradientTop, mGradientBottom, LinearGradientMode.Vertical)) { g.FillPath(outerBrush, outerPath); } using (Pen outlinePen = new Pen(mGradientTop, mRectOutlineWidth)) { outlinePen.Alignment = PenAlignment.Inset; g.DrawPath(outlinePen, outerPath); } } //// Paint the gel highlight using (GraphicsPath innerPath = GeneralUtilities.RoundedRectangle(mHighlightRect, mRectCornerRadius, mHighlightRectOffset)) { using (LinearGradientBrush innerBrush = new LinearGradientBrush(mHighlightRect, Color.FromArgb(mHighlightAlphaTop, Color.White), Color.FromArgb(mHighlightAlphaBottom, Color.White), LinearGradientMode.Vertical)) { g.FillPath(innerBrush, innerPath); } } // Paint the text TextRenderer.DrawText(g, Text, Font, mLabelRect, Color.White, Color.Transparent, TextFormatFlags.HorizontalCenter | TextFormatFlags.VerticalCenter | TextFormatFlags.EndEllipsis); 

    Mais si vous voulez en avoir un bon, vous devez utiliser wpf CheckBox ControlTemplate Example