IT rekvalifikace s garancí práce. Seniorní programátoři vydělávají až 160 000 Kč/měsíc a rekvalifikace je prvním krokem. Zjisti, jak na to!
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í.
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.