IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

C# Discussion :

Enlever la fleche du comboBox


Sujet :

C#

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre très actif
    Inscrit en
    Février 2011
    Messages
    106
    Détails du profil
    Informations forums :
    Inscription : Février 2011
    Messages : 106
    Par défaut Enlever la fleche du comboBox
    Bonjour ,

    ma question est tres simple, je veux comme même utiliser un comboBox
    sans que la flche apparait.

    Je vous remercie d'avance
    Images attachées Images attachées  

  2. #2
    Expert confirmé
    Avatar de StringBuilder
    Homme Profil pro
    Chef de projets
    Inscrit en
    Février 2010
    Messages
    4 197
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Chef de projets
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2010
    Messages : 4 197
    Billets dans le blog
    1
    Par défaut
    J'ai pensé sur le moment à utiliser un textbox avec un Handled sur le keypress et un autocomplete contenant ta liste... sauf que j'ai pas trouvé de moyen de forcer l'affichage de la liste d'autocomplete sur click de la souris...

  3. #3
    Membre extrêmement actif
    Inscrit en
    Avril 2008
    Messages
    2 573
    Détails du profil
    Informations personnelles :
    Âge : 65

    Informations forums :
    Inscription : Avril 2008
    Messages : 2 573
    Par défaut
    bonjour marocdivers
    Si tu supprimes ladite fleche -et que tu as bien pris soin de la regarder franchement les yeux dans les yeux - tu constateras qu'elle est dessine en fait à l'interieur d'un petit rectangle qui represente helas une zone clickable qui signale au controle qu'on a clique...
    Du coup on ne pourras plus signaler au controle l'etat actuel(active,desactive)Cette fleche dessine dans le petit rectangle à droite est un veritable bouton couple au textbox...
    Par quoi vas-tu le substituer?.....cliquer dans le textbox?.
    Helas les click du textbox sont reserves au textbox pour les selectedindex et tutti quanti...
    En resume si on fait cela on va reinventer la roue c.à.d finir dans une "nouvelle version" du listbox car un listbox visuellement n'est qu'un combobox sans la fleche et dont dropdowned en permanence.............
    bon code................

  4. #4
    Membre extrêmement actif
    Inscrit en
    Avril 2008
    Messages
    2 573
    Détails du profil
    Informations personnelles :
    Âge : 65

    Informations forums :
    Inscription : Avril 2008
    Messages : 2 573
    Par défaut
    rebonjour marocdivers
    Voici comment on peut personnaliser le combobox à l'aide de l' API VisualStyles ................

    Extrait MSDN Doc:
    Cela est utile si vous dessinez un contrôle personnalisé qui doit avoir l'apparence du style visuel actuel. Pour dessiner une zone de liste déroulante, utilisez la méthode DrawTextBox pour dessiner la zone de texte et la méthode DrawDropDownButton pour dessiner la flèche de déroulement.
    L'extrait de code qui montre qu'on ne peut pas supprimer "la fleche" et il faut comprendre egalement que les styles visuels doivent etre actives:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
     
    using System;
    using System.Drawing;
    using System.Windows.Forms;
    using System.Windows.Forms.VisualStyles;
     
    namespace ComboBoxRendererSample
    {
        class Form1 : Form
        {
            public Form1()
                : base()
            {
                this.Size = new Size(300, 300);
                CustomComboBox ComboBox1 = new CustomComboBox();
                Controls.Add(ComboBox1);
            }
     
            [STAThread]
            static void Main()
            {
                // The call to EnableVisualStyles below does not affect
                // whether ComboBoxRenderer.IsSupported is true; as long as visual
                // styles are enabled by the operating system, IsSupported is true.
                Application.EnableVisualStyles();
                Application.Run(new Form1());
            }
        }
     
        public class CustomComboBox : Control
        {
            private Size arrowSize;
            private Rectangle arrowRectangle;
            private Rectangle topTextBoxRectangle;
            private Rectangle bottomTextBoxRectangle;
            private ComboBoxState textBoxState = ComboBoxState.Normal;
            private ComboBoxState arrowState = ComboBoxState.Normal;
            private String bottomText = "Using ComboBoxRenderer";
            private bool isActivated = false;
            private const int minHeight = 38;
            private const int minWidth = 40;
     
            public CustomComboBox()
                : base()
            {
                this.Location = new Point(10, 10);
                this.Size = new Size(140, 38);
                this.Font = SystemFonts.IconTitleFont;
                this.Text = "Click the button";
     
                // Initialize the rectangles to look like the standard combo 
                // box control.
                arrowSize = new Size(18, 20);
                arrowRectangle = new Rectangle(ClientRectangle.X +
                    ClientRectangle.Width - arrowSize.Width - 1,
                    ClientRectangle.Y + 1,
                    arrowSize.Width,
                    arrowSize.Height);
                topTextBoxRectangle = new Rectangle(ClientRectangle.X,
                    ClientRectangle.Y,
                    ClientRectangle.Width,
                    arrowSize.Height + 2);
                bottomTextBoxRectangle = new Rectangle(ClientRectangle.X,
                    ClientRectangle.Y + topTextBoxRectangle.Height,
                    ClientRectangle.Width,
                    topTextBoxRectangle.Height - 6);
            }
     
            // Draw the combo box in the current state.
            protected override void OnPaint(PaintEventArgs e)
            {
                base.OnPaint(e);
     
                if (!ComboBoxRenderer.IsSupported)
                {
                    this.Parent.Text = "Visual Styles Disabled";
                    return;
                }
     
                this.Parent.Text = "CustomComboBox Enabled";
     
                // Always draw the main text box and drop down arrow in their 
                // current states
                ComboBoxRenderer.DrawTextBox(e.Graphics, topTextBoxRectangle,
                    this.Text, this.Font, textBoxState);
                ComboBoxRenderer.DrawDropDownButton(e.Graphics, arrowRectangle,
                    arrowState);
     
                // Only draw the bottom text box if the arrow has been clicked
                if (isActivated)
                {
                    ComboBoxRenderer.DrawTextBox(e.Graphics,
                        bottomTextBoxRectangle, bottomText, this.Font,
                        textBoxState);
                }
            }
     
            protected override void OnMouseDown(MouseEventArgs e)
            {
                base.OnMouseDown(e);
     
                // Check whether the user clicked the arrow.
                if (arrowRectangle.Contains(e.Location) &&
                    ComboBoxRenderer.IsSupported)
                {
                    // Draw the arrow in the pressed state.
                    arrowState = ComboBoxState.Pressed;
     
                    // The user has activated the combo box.
                    if (!isActivated)
                    {
                        this.Text = "Clicked!";
                        textBoxState = ComboBoxState.Pressed;
                        isActivated = true;
                    }
     
                    // The user has deactivated the combo box.
                    else
                    {
                        this.Text = "Click here";
                        textBoxState = ComboBoxState.Normal;
                        isActivated = false;
                    }
     
                    // Redraw the control.
                    Invalidate();
                }
            }
     
            protected override void OnMouseUp(MouseEventArgs e)
            {
                base.OnMouseUp(e);
     
                if (arrowRectangle.Contains(e.Location) &&
                    ComboBoxRenderer.IsSupported)
                {
                    arrowState = ComboBoxState.Normal;
                    Invalidate();
                }
            }
        }
    }
    Si tu supprimes arrowRectangleil ne restera plus qu'un pauvre textbox inefficace ..................
    bon code...............
    bon code.................

  5. #5
    Membre très actif
    Inscrit en
    Février 2011
    Messages
    106
    Détails du profil
    Informations forums :
    Inscription : Février 2011
    Messages : 106
    Par défaut
    tu te trompes mr mebrouki, pourquoi?
    une listeBox n'est accessible qu'on lecture. tu ne peux pas te positionner sur le textbox pour erire.
    et la flèche mr mebrouki peut etre remplacer par un evenement du clavier

  6. #6
    Membre extrêmement actif
    Inscrit en
    Avril 2008
    Messages
    2 573
    Détails du profil
    Informations personnelles :
    Âge : 65

    Informations forums :
    Inscription : Avril 2008
    Messages : 2 573
    Par défaut
    bonjour maroccodivers
    Eh bien,puisque tu peux la remplacer par un evenement clavier ,tu preux carrement supprimer la combobox tant que tu y est et ne plus poser de question................
    Quant au listbox et combbox je vois que pour toi il y a une difference gigantestque entre un textbox en lecture seule et un textbox lecture-ecriture....
    bonne soiree

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [Débutant] Enlever le focus à un combobox
    Par cmo1979 dans le forum VB.NET
    Réponses: 5
    Dernier message: 26/06/2013, 09h35
  2. Enlever les doublons dans ComboBox
    Par Paindep dans le forum VB 6 et antérieur
    Réponses: 6
    Dernier message: 29/06/2010, 12h00
  3. Enlever celulle vide combobox a 2 colonne
    Par ptitepo dans le forum Macros et VBA Excel
    Réponses: 14
    Dernier message: 05/06/2008, 16h12
  4. probléme fleche Combobox
    Par Guillau.laurent dans le forum C++Builder
    Réponses: 0
    Dernier message: 05/12/2007, 11h23
  5. Enlever les cellules vide dans un ComboBox
    Par Dream Master dans le forum Macros et VBA Excel
    Réponses: 10
    Dernier message: 31/05/2007, 16h14

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo