NOVINKA - Online rekvalifikační kurz Python programátor. Oblíbená a studenty ověřená rekvalifikace - nyní i online.
Hledáme nové posily do ITnetwork týmu. Podívej se na volné pozice a přidej se do nejagilnější firmy na trhu - Více informací.

Diskuze: Vykreslení obrázku k jednotlivým itemům v listboxu.

V předchozím kvízu, Test znalostí C# .NET online, jsme si ověřili nabyté zkušenosti z kurzu.

Jak se ti líbí článek?
Před uložením hodnocení, popiš prosím autorovi, co je špatněZnaků 0 z 50-500
Jak se ti kurz líbí?
Tvé hodnocení kurzuZnaků 0 z 50-500
Aktivity
Avatar
tomkrata
Člen
Avatar
tomkrata:21.5.2017 17:41

Někde jsem zjistil, že bych mohl použít událost "DrawItem"a tam ten obrázek vykreslit, ale nevím, kdy se metoda zavolá a jak zde mám obrázek vykreslit ke každému itemu zvlášť.

 
Odpovědět
21.5.2017 17:41
Avatar
xpoproci
Člen
Avatar
xpoproci:21.5.2017 17:51

Chceš mať list v ktorom sú obrázky, list kde pri kliknutí na item sa vykreslí obrázok? Skús to viac rozpísať, lebo takto celkom nerozumiem čo sa pýtaš. Prípadne daj obrázok ako si to predstavuješ.

Editováno 21.5.2017 17:52
Nahoru Odpovědět
21.5.2017 17:51
Motto
Avatar
tomkrata
Člen
Avatar
Odpovídá na xpoproci
tomkrata:21.5.2017 17:58

Kdykoliv přidám item do listboxu, tak by se před něj měl vykreslit obrázek.

 
Nahoru Odpovědět
21.5.2017 17:58
Avatar
xpoproci
Člen
Avatar
xpoproci:21.5.2017 18:40

Možno by tento účel lepšie poslúžil ListView, kde si to rovno prepojíš s ImageListom a pri každom vkladaní do listu, dáš ako druhý parameter index obrázka v ImageListe.

var rnd = new Random();
var i = rnd.Next(0, imageList1.Images.Count-1));
var item = new ListViewItem($"Item with image_{i}", i);
listView1.Items.Add(item);

Takto potom pridáš do toho ListView, s tým, že pre teba to i nebude náhodné číslo, ale číslo obrázka danej akcie. trochu sa stačí pohrať s nastavením a tu je výsledok.

Akceptované řešení
+20 Zkušeností
+2,50 Kč
Řešení problému
Nahoru Odpovědět
21.5.2017 18:40
Motto
Avatar
HONZ4
Člen
Avatar
Odpovídá na tomkrata
HONZ4:21.5.2017 19:18

do projektu přidej ImageList s obrázky

namespace ListIcons
{
    public partial class Form1 : Form
    {
        private int textpos;
        /// <summary>
        /// seznam položek
        /// </summary>
        List<MyItem> itms = new List<MyItem>()
        {
            new MyItem(1, "0001"),
            new MyItem(0, "0002"),
            new MyItem(1, "0003"),
            new MyItem(0, "0004")
        };

        public Form1()
        {
            InitializeComponent();
            textpos = imageList1.ImageSize.Width + 4; // pozice textu z leva
            listBox1.ItemHeight = imageList1.ImageSize.Height + 2; //výška řádku
            listBox1.DrawMode = DrawMode.OwnerDrawFixed;
            listBox1.DataSource = itms;
        }

        private void listBox1_DrawItem(object sender, DrawItemEventArgs e)
        {
            e.DrawBackground();
            e.DrawFocusRectangle();
            imageList1.Draw(e.Graphics, e.Bounds.Left, e.Bounds.Top, itms[e.Index].ImageIndex );
            e.Graphics.DrawString(itms[e.Index].Text,
                                  e.Font,
                                  new SolidBrush(e.ForeColor),
                                  e.Bounds.Left + textpos,
                                  e.Bounds.Bottom - e.Font.Height - 8);
        }
    }

    public class MyItem
    {
        public int ImageIndex { get; set; }
        public string Text { get; set; }

        public MyItem(int image_index, string text)
        {
            ImageIndex = image_index;
            Text = text;
        }

        public override string ToString()
        {
            return Text;
        }
    }
}

ale taky bych spíš použil ListView s virtuálním přístupem

Editováno 21.5.2017 19:21
 
Nahoru Odpovědět
21.5.2017 19:18
Děláme co je v našich silách, aby byly zdejší diskuze co nejkvalitnější. Proto do nich také mohou přispívat pouze registrovaní členové. Pro zapojení do diskuze se přihlas. Pokud ještě nemáš účet, zaregistruj se, je to zdarma.

Zobrazeno 5 zpráv z 5.