Diskuze: Jak přidat obrázek do listboxu ve Visual Basic?

C# .NET .NET (C# a Visual Basic) Jak přidat obrázek do listboxu ve Visual Basic? American English version English version

Avatar
josef.m
Člen
Avatar
josef.m:

Ahoj, začal jsem si dělat úkolníček v programu Visual Basic. Nevím, jak přidat při kliknutí na item ikonku hotovo (zelená), rozpracováno (modrá) nebo uzavřeno (červená). Netušíte prosím, jak tohoto efektu dosáhnout? Prosím o podrobné vysvětlení. Jsem začátečník.
Něco jednoduchého začínající nějak takto:

Private Sub ListBox1_Clic­k(sender As Object, e As EventArgs) Handles ListBox1.Click
Kód
End Sub

Odpovědět 19. října 18:57
Nic není nemožné.
Avatar
Miroslav Holubek:

listbox túto možnosť nemá, má ju listview,
no ja by som k tomu skôr použil datagridview

 
Nahoru Odpovědět  +1 20. října 8:47
Avatar
josef.m
Člen
Avatar
Odpovídá na Miroslav Holubek
josef.m:

Děkuji za odpověď, neexistuje nějaká alternativa? Např. změnit pozadí itemu? Default modře 1. klik na zelenou, 2. klik na červenou. Potřeboval bych něco, čím bych si označil splněné, nesplněné a rozdělané úkoly.

Nahoru Odpovědět 20. října 19:41
Nic není nemožné.
Avatar
Odpovídá na josef.m
Michal Štěpánek:

Jestli to děláš ve winforms, tak tam moc možností není, na to je lepší wpf

Nahoru Odpovědět 20. října 21:24
Nikdy neříkej nahlas, že to nejde. Vždycky se totiž najde blbec, který to neví a udělá to...
Avatar
Miroslav Holubek:

použi ten datagridview, do jedného stĺpca vlož text úlohy, do druhého nevkladaj nič, len mu v kóde zmeň farbu pozadia, kliknutím na ten stĺpec zmeň znova farbu na akú chceš, prípadne mu daj contect menu strip

nemám k dispozícii visual studio, tak ti nedám presný kód, tak to ber s rezervou

private sub LoadDataGridView()
        dgv.rowcount += 1
        dgv.rows(dgv.rowcount-1).cells(0).value = "Uloha 1"
        dgv.rows(dgv.rowocunt-1).cells(1).style.backcolor = color.red
end sub

Private Sub dgv_CellClick(sender As Object, e As EventArgs) Handles dgv.CellClick
        if e.columnindex = 1 then
                if e.backcolor = color.red then
                        e.backcolor = color.blue
                elseif e.backcolor = color.blue then
                        e.backcolor = color.green
                elseif e.backcolor = color.green
                        e.backcolor = color.red
                end if
        end if
End Sub

písal som to z hlavy, tak tam budú chyby,
skús a uvidíš či ti to vyhovuje,
datagridview má obrovské množstvo vlastností, čiže dokážes s ním dosiahnúť čokoľvek

Editováno 20. října 21:51
 
Nahoru Odpovědět 20. října 21:50
Avatar
josef.m
Člen
Avatar
josef.m:

Ahoj, děkuji za odpověď, Upravil jsem to takto:

Private Sub LoadDataListBox()
      ListBox1.rowcount += 1
      ListBox1.rows(ListBox1.rowcount - 1).cells(0).value = "Uloha 1"
      ListBox1.rows(ListBox1.rowocunt - 1).cells(1).style.backcolor = Color.Red
  End Sub

  Private Sub ListBox1_Click(sender As Object, e As EventArgs) Handles ListBox1.Click
      If e.columnindex = 1 Then
          If e.backcolor = Color.Red Then
              e.backcolor = Color.Blue
          ElseIf e.backcolor = Color.Blue Then
              e.backcolor = Color.Green
          ElseIf e.backcolor = Color.Green Then
              e.backcolor = Color.Red
          End If
      End If
  End Sub

Vyskytující se chyby:

'columnindex' is not a member of System.EventsArgs
'backcolor' is not a member of System.EventsArgs
'rowcount' is not a member of System.Window­s.Forms.ListBox
'row' is not a member of System.Window­s.Forms.ListBox

Nahoru Odpovědět 20. října 22:14
Nic není nemožné.
Avatar
josef.m
Člen
Avatar
Odpovídá na josef.m
josef.m:

Ten dataview nenavazuje na moje funkce, kouknu na to o víkendu. To bude chtít začít celý program znova.

Nahoru Odpovědět 20. října 22:17
Nic není nemožné.
Avatar
Odpovídá na josef.m
Miroslav Holubek:

jasné že ti to hádže chyby, pretože listbox nemá tieto možnosti, jasne som napísal datagridview :)
pozri si to, nemáš s tým čo pokaziť

 
Nahoru Odpovědět 20. října 22:19
Avatar
Miroslav Holubek:

ešte teraz keď pozerám neviem či bude fungovať

e.backcolor = color...

možno to budeš musieť vymeniť za

datagridview.rows(číslo riadku).cells(číslo stĺpca).style.backcolor = color...
 
Nahoru Odpovědět 20. října 22:22
Avatar
JK CZ
Člen
Avatar
Odpovídá na josef.m
JK CZ:

Pokud je to pro WinForms a chtel by si pouzit ListView, tak tady mam priklad jak vyplnit ListView s pridanim obrazku do kazdeho radku a prvniho sloupce pred text .
Je nutno na form pridat ListView nastavenim Name = lstOverview a View = Details

Je to sice jen ukazka jak zhruba na to, ale mohla by se hodit ... :-)

Pozor v kodu Do Loop nema podminku ukonceni!To si musis nejak osetrit sam...

Private Sub FillListView()

    'Vymazani vsech sloupcu
    lstOverview.Columns.Clear()

    'Vymazani vsech radku v ListView
    lstOverview.Items.Clear()

    lstOverview.Columns.Add("HeaderText1") 'Pridani sloupce do ListView

    '... Popripade pridani dalsich sloupcu do ListView
    lstOverview.Columns.Add("HeaderText2")
    lstOverview.Columns.Add("HeaderText3")

    ' Vytvoreni imagelistu
    Dim meImageStatusList As New ImageList()

    ' Cesta k souborum s obrazky
    Dim path As String = "C:\x\...."

    'Nahreani obrazku do ImageListu
    meImageStatusList.Images.Add(Bitmap.FromFile(path & "Picture1.png"))
    meImageStatusList.Images.Add(Bitmap.FromFile(path & "Picture2.png"))
    '.........

    'ImageList do  ListView.SmallImageList
    lstOverview.SmallImageList = meImageStatusList

    'Vyplneni radku ListView
    Do
        '......

        ' Cislo Obrazku ktery se ma zobrazit
        Dim imageIndex As Integer = 1

        'Pridani noveho radku s textm "Text" do ListView + vypneni indexu obrazku ktery se ma zobrazit
        Dim lsi = lstOverview.Items.Add("Text", imageIndex)

        'Popripade pridani dalsich subitems
        lsi.SubItems.Add("SubItem1Text")
        lsi.SubItems.Add("SubItem2Text")

        '....
    Loop

End Sub
 
Nahoru Odpovědět 21. října 15:39
Avatar
Petr Čech (czubehead):

Říkáš, že jsi začátečník. Být tebou přejdu místo zastaralého WinForms na moderní WPF, než bude pozdě se přeučovat. Opravdu to za to stojí, ze začátku si možná budeš říkat, že ne, ale až se dostaneš na věci jako právě třeba tohle oceníš to.

Nahoru Odpovědět 22. října 12:56
Why so serious? -Joker
Avatar
JK CZ
Člen
Avatar
Odpovídá na Petr Čech (czubehead)
JK CZ:

Ano doporucuji take prejit na WPF.Sice WinForm je asi trochu jednodusi, ale budes se zbytecne ucit neco co nema budoucnost....

 
Nahoru Odpovědět 22. října 13:19
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 12 zpráv z 12.