none
Horizontal Images in listview RRS feed

  • Question

  • comment afficher dans le 1er rang de listview avec des images contenus dans imagelist.

    How to set all images contained in imagelist in the fisrt row of listview

    i mean:

    listview.Item.Subitem[0] = first image in imagelist

    listview.Item.Subitem[1] = second image in imagelist

    and so.


    Vb deloppers

    dimanche 17 février 2019 16:26

Réponses

  • I find a response in a web.

                lvWeather.OwnerDraw = true; //set property to drawin mode

                for (int i=0;  i < lvData.Length -1; i++){lvData[i] = "";}
                ListViewItem lvItemInit = new ListViewItem(lvData, 0);
                lvWeather.Items.Add(lvItemInit);
                lvItemInit.UseItemStyleForSubItems = false; //stop style for subitem

    //this initia tag subitem with index of image in listImage

                getRowIndexArgInLv(lvWeather);

            private void getRowIndexArgInLv(ListView lv)
            {
                lv.FullRowSelect = true;
                String StringSearch = "";
                foreach (ListViewItem item in lv.Items)
                {
                    for(int i=0; i < item.SubItems.Count-1; i++)
                    {
                        item.SubItems[i].Tag = i;
                    }
                }
            }

    private void lvWeather_DrawItem(object sender, DrawListViewItemEventArgs e)
            {
                e.DrawDefault = true;
            }
    
            private void lvWeather_DrawSubItem(object sender, DrawListViewSubItemEventArgs e)
            {
                e.DrawBackground();
                Size sz = lvWeather.SmallImageList.ImageSize;
                int idx = 0;
                if (e.SubItem.Tag != null) idx = (int)e.SubItem.Tag;
                Bitmap bmp = (Bitmap)lvWeather.SmallImageList.Images[idx];
                Rectangle rTgt = new Rectangle(e.Bounds.Location, sz);
                bool selected = e.ItemState.HasFlag(ListViewItemStates.Selected);
                // optionally show selection:
                if (selected) e.Graphics.FillRectangle(Brushes.CornflowerBlue, e.Bounds);
    
                if (bmp != null) e.Graphics.DrawImage(bmp, rTgt);
    
                // optionally draw text
                e.Graphics.DrawString(e.SubItem.Text, lvWeather.Font,
                                      selected ? Brushes.White : Brushes.Black,
                                      e.Bounds.X + sz.Width + 2, e.Bounds.Y + 2);
            }
    
            private void lvWeather_DrawColumnHeader(object sender, DrawListViewColumnHeaderEventArgs e)
            {
                e.DrawDefault = true;
            }



    c# , vb, jQuery developper

    lundi 18 février 2019 15:30

Toutes les réponses

  • Bonjour CoolerHigh, 

    Dans la documentation de la propriété ListViewItem.SubItems il y a un exemple qui peut vous aider.

    Cordialement,
    Nina


    Microsoft propose ce service gratuitement, dans le but d'aider les utilisateurs et d'élargir les connaissances générales liées aux produits et technologies Microsoft. Ce contenu est fourni "tel quel" et il n'implique aucune responsabilité de la part de Microsoft.

    lundi 18 février 2019 14:29
    Modérateur
  • I find a response in a web.

                lvWeather.OwnerDraw = true; //set property to drawin mode

                for (int i=0;  i < lvData.Length -1; i++){lvData[i] = "";}
                ListViewItem lvItemInit = new ListViewItem(lvData, 0);
                lvWeather.Items.Add(lvItemInit);
                lvItemInit.UseItemStyleForSubItems = false; //stop style for subitem

    //this initia tag subitem with index of image in listImage

                getRowIndexArgInLv(lvWeather);

            private void getRowIndexArgInLv(ListView lv)
            {
                lv.FullRowSelect = true;
                String StringSearch = "";
                foreach (ListViewItem item in lv.Items)
                {
                    for(int i=0; i < item.SubItems.Count-1; i++)
                    {
                        item.SubItems[i].Tag = i;
                    }
                }
            }

    private void lvWeather_DrawItem(object sender, DrawListViewItemEventArgs e)
            {
                e.DrawDefault = true;
            }
    
            private void lvWeather_DrawSubItem(object sender, DrawListViewSubItemEventArgs e)
            {
                e.DrawBackground();
                Size sz = lvWeather.SmallImageList.ImageSize;
                int idx = 0;
                if (e.SubItem.Tag != null) idx = (int)e.SubItem.Tag;
                Bitmap bmp = (Bitmap)lvWeather.SmallImageList.Images[idx];
                Rectangle rTgt = new Rectangle(e.Bounds.Location, sz);
                bool selected = e.ItemState.HasFlag(ListViewItemStates.Selected);
                // optionally show selection:
                if (selected) e.Graphics.FillRectangle(Brushes.CornflowerBlue, e.Bounds);
    
                if (bmp != null) e.Graphics.DrawImage(bmp, rTgt);
    
                // optionally draw text
                e.Graphics.DrawString(e.SubItem.Text, lvWeather.Font,
                                      selected ? Brushes.White : Brushes.Black,
                                      e.Bounds.X + sz.Width + 2, e.Bounds.Y + 2);
            }
    
            private void lvWeather_DrawColumnHeader(object sender, DrawListViewColumnHeaderEventArgs e)
            {
                e.DrawDefault = true;
            }



    c# , vb, jQuery developper

    lundi 18 février 2019 15:30