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

Windows Forms Discussion :

C# - Comboxbox dans cellule Listview en mode détails, possible ?


Sujet :

Windows Forms

  1. #1
    Membre actif Avatar de hellspawn_ludo
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    257
    Détails du profil
    Informations personnelles :
    Âge : 47
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 257
    Points : 215
    Points
    215
    Par défaut C# - Comboxbox dans cellule Listview en mode détails, possible ?
    Bonjour à tous,

    Ne trouvant pas mon bonheur, je fais appel à vous.

    J'aimerais, dans un listview à 2 colonnes (en mode détail), mettre une combobox dans certaines cellules de la colonne 2, mais pas dans toutes.

    J'aurais voulu savoir si quelqu'un aurait une petit astuce à me donner ou bien me dire s'il est possible de "re"créer le contrôle listview en y ajoutant le fait qu'une cellule peut comporter un autre controle de type combobox ?

    Pour info, le but final est de lister toutes les propriétés et valeurs d'un compte Active Directory.
    Et comme certaines propriétés comportent plusieurs valeurs, vous aurez compris que j'aurais aimé les lister dans une combobox.

    Merci pour votre aide

  2. #2
    Expert confirmé
    Inscrit en
    Avril 2008
    Messages
    2 564
    Détails du profil
    Informations personnelles :
    Âge : 64

    Informations forums :
    Inscription : Avril 2008
    Messages : 2 564
    Points : 4 441
    Points
    4 441
    Par défaut combobox dans un listview,combobox intrus et fantome
    bonjour hellspawn_ludo
    Voici comment:c'est un ComboBox si j'ose dire fantome et intrus puisque c'est un ComboBox droppe simplement sur le controle Winform et rendu invisible à l'execution.
    Ensuite il est reaffiche par dessus une colonne du controle personnalise myListview.
    code du controle personnalise MyListView:
    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
     
    //controle personnalise MyListView
    using System;
    using System.Collections.Generic;
    using System.ComponentModel;
    using System.Data;
    using System.Drawing;
    using System.Linq;
    using System.Text;
    using System.Windows.Forms;
     
    namespace ListViewHerite
    {
        public partial class MyListView : ListView
        {
            public MyListView()
            {
                // Cet appel est nécessaire au Concepteur de formulaire Windows.Forms.
                InitializeComponent();
     
                // TODO : // Ajoute toute initialisation exécutée après l’appel InitForm
            }
     
     
            protected override void OnPaint(PaintEventArgs pe)
            {
                base.OnPaint(pe);
            }
            private const int WM_HSCROLL = 0x114;
            private const int WM_VSCROLL = 0x115;
     
            protected override void WndProc(ref Message msg)
            {
                // Recherche le message WM_VSCROLL ou WM_HSCROLL.
                if ((msg.Msg == WM_VSCROLL) || (msg.Msg == WM_HSCROLL))
                {
                    // Déplace le focus de ListView de sorte que ComboBox le perde.
                    this.Focus();
                }
     
                // Transmet le message au gestionnaire par défaut.
                base.WndProc(ref msg);
            } 
     
        }
    }
    code du winform test :
    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
    143
    144
    145
    146
    147
    148
    149
    150
    151
    152
    153
    154
    155
    156
    157
    158
    159
    160
    161
    162
    163
    164
    165
    166
    167
    168
    169
    170
    171
     
    //code winform de test
    //1-dropper un controle listview .
    //renommer-le en myListView1.
    //2-dropper un controle combobox n'importe ou.
    //renommer-le cbListViewCombo et rendez-le invisible.
    using System;
    using System.Collections.Generic;
    using System.ComponentModel;
    using System.Data;
    using System.Drawing;
    using System.Linq;
    using System.Text;
    using System.Windows.Forms;
     
    namespace ListViewHerite
    {
        public partial class frmTest : Form
        {
            private ListViewItem lvItem;
            public frmTest()
            {
                InitializeComponent();
                this.cbListViewCombo.Visible = false;
            }
            //Ajoutez le code suivant à l'événement Load de Form1 : 
            private void frmTest_Load(object sender, EventArgs e)
            {
                // Ajoute des éléments à la zone de liste déroulante.
                this.cbListViewCombo.Items.Add("NC");
                this.cbListViewCombo.Items.Add("WA");
     
     
                // Définit l'affichage de ListView sur Détails.
                this.myListView1.View = View.Details;
     
                // Active la sélection de ligne complète.
                this.myListView1.FullRowSelect = true;
     
                // Ajoute des données à ListView.
                ColumnHeader columnheader;
                ListViewItem listviewitem;
     
                // Crée les données d'exemple ListView.
                listviewitem = new ListViewItem("NC");
                listviewitem.SubItems.Add("Caroline du Nord");
                this.myListView1.Items.Add(listviewitem);
     
                listviewitem = new ListViewItem("WA");
                listviewitem.SubItems.Add("Washington");
                this.myListView1.Items.Add(listviewitem);
     
                // Crée des en-têtes de colonne pour les données.
                columnheader = new ColumnHeader();
                columnheader.Text = "Abr. Pays";
                this.myListView1.Columns.Add(columnheader);
     
                columnheader = new ColumnHeader();
                columnheader.Text = "État";
                this.myListView1.Columns.Add(columnheader);
     
                // Recherche et dimensionne chaque en-tête de colonne afin qu'il s'adapte au texte d'en-tête.
                foreach (ColumnHeader ch in this.myListView1.Columns)
                {
                    ch.Width = -2;
                }
            }
            //Ajoutez le code suivant à l'événement SelectedValueChanged de la zone de liste déroulante :
            private void cbListViewCombo_SelectedValueChanged(object sender, EventArgs e)
            {
                // Définit le texte de l'élément ListView pour qu'il corresponde à la zone de liste déroulante.
                lvItem.Text = this.cbListViewCombo.Text;
     
                // Masque la zone de liste déroulante.
                this.cbListViewCombo.Visible = false;
            }
           //Ajoutez le code suivant à l'événement Leave de la zone de liste déroulante : 
            private void cbListViewCombo_Leave(object sender, EventArgs e)
            {
                // Définit le texte de l'élément ListView pour qu'il corresponde à la zone de liste déroulante.
                lvItem.Text = this.cbListViewCombo.Text;
     
                // Masque la zone de liste déroulante.
                this.cbListViewCombo.Visible = false;
            }
            //Ajoutez le code suivant à l'événement KeyPress de la zone de liste déroulante 
            private void cbListViewCombo_KeyPress(object sender, KeyPressEventArgs e)
            {
                // Vérifie que l'utilisateur appuie sur Echap.
                switch (e.KeyChar)
                {
                    case (char)(int)Keys.Escape:
                        {
                            // Réinitialise la valeur de texte originale, puis masque la zone de liste déroulante.
                            this.cbListViewCombo.Text = lvItem.Text;
                            this.cbListViewCombo.Visible = false;
                            break;
                        }
     
                    case (char)(int)Keys.Enter:
                        {
                            // Masque la zone de liste déroulante.
                            this.cbListViewCombo.Visible = false;
                            break;
                        }
                }
            }
            //Ajoutez le code suivant à l'événement MouseUp de myListView1 : 
            private void myListView1_MouseUp(object sender, MouseEventArgs e)
            {
                // Obtient l'élément sur la ligne sélectionnée.
                lvItem = this.myListView1.GetItemAt(e.X, e.Y);
     
                // Vérifie que l'utilisateur a cliqué sur un élément.
                if (lvItem != null)
                {
                    // Obtient les limites de l'élément sélectionné.
                    Rectangle ClickedItem = lvItem.Bounds;
     
                    // Vérifie que la colonne commence complètement à gauche.
                    if ((ClickedItem.Left + this.myListView1.Columns[0].Width) < 0)
                    {
                        // Si la cellule n'est pas visible à gauche, aucune action.
                        return;
                    }
     
                    // Vérifie que la colonne commence partiellement à gauche.
                    else if (ClickedItem.Left < 0)
                    {
                        // Détermine si une colonne s'étend au-delà de la limite droite de ListView.
                        if ((ClickedItem.Left + this.myListView1.Columns[0].Width) > this.myListView1.Width)
                        {
                            // Définit la largeur de la colonne pour correspondre à la largeur de ListView.
                            ClickedItem.Width = this.myListView1.Width;
                            ClickedItem.X = 0;
                        }
                        else
                        {
                            // Le côté droit de la cellule est visible.
                            ClickedItem.Width = this.myListView1.Columns[0].Width + ClickedItem.Left;
                            ClickedItem.X = 2;
                        }
                    }
                    else if (this.myListView1.Columns[0].Width > this.myListView1.Width)
                    {
                        ClickedItem.Width = this.myListView1.Width;
                    }
                    else
                    {
                        ClickedItem.Width = this.myListView1.Columns[0].Width;
                        ClickedItem.X = 2;
                    }
     
                    // Ajuste le sommet en fonction de la position de ListView.
                    ClickedItem.Y += this.myListView1.Top;
                    ClickedItem.X += this.myListView1.Left;
     
                    // Attribue des limites calculées à la zone de liste déroulante.
                    this.cbListViewCombo.Bounds = ClickedItem;
     
                    // Définit le texte par défaut de la zone de liste déroulante de sorte à correspondre à l'élément sélectionné.
                    this.cbListViewCombo.Text = lvItem.Text;
     
                    // Affiche la zone de liste déroulante et vérifie qu'elle est en haut avec focus.
                    this.cbListViewCombo.Visible = true;
                    this.cbListViewCombo.BringToFront();
                    this.cbListViewCombo.Focus();
                }
            }
        }
    }
    :
    lien msdn du code ci-dessus:
    http://www.google.fr/url?sa=t&source...H0-Mvsq7U82ciw
    Titre du lien google:
    How to use a ComboBox control to edit data in a ListView control .
    bon code..................

  3. #3
    Membre actif Avatar de hellspawn_ludo
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    257
    Détails du profil
    Informations personnelles :
    Âge : 47
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 257
    Points : 215
    Points
    215
    Par défaut
    Bonjour,

    L'idée est bonne, très bonne et fonctionnelle surtout
    Cela m'en donne même d'autres au passage.

    Et bien, je te remercie grandement pour ton aide qui m'a été très précieuse et te dit peut être à un de ces 4

    Encore merci à toi

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

Discussions similaires

  1. Réponses: 10
    Dernier message: 10/10/2013, 09h10
  2. [AC-2003] Image dans une ListView sous Access 2003 possible ?
    Par AndroJex dans le forum IHM
    Réponses: 0
    Dernier message: 30/08/2012, 13h38
  3. Fusionner des cellules dans un ListView
    Par Fly3R dans le forum Windows Forms
    Réponses: 2
    Dernier message: 02/09/2007, 12h37
  4. sélectionner un item dans un listview en mode détail.
    Par grome dans le forum Windows Forms
    Réponses: 7
    Dernier message: 22/08/2007, 12h16
  5. Image dans listview mode détail
    Par metallica14 dans le forum VB.NET
    Réponses: 1
    Dernier message: 26/07/2007, 13h23

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