ProgressBar1   otázka

VB.NET

Dobrý deň, som vo VB taky mierne pokročily začiatočník a mám menší problém s ProgressBarom a Listboxom. V Listboxe mám napr. 31 položiek čo predstavuje 100% a potrebujem ich jednotlivo odoslať. Lenže inkrementovať ProgressBar možem iba o cele číslo a 1 položka mi predstavuje 3,225% ale výsledok do inkrementu mi zapíše iba 3 -> ProgressBar.Increment(3), zvyšok vynechá a tu mam problém lebo po odoslaní 31 položiek mi progresbar ukazuje hodnotu iba na 93% nie 100%.

Vedel by mi niekto poradiť ako s tým pohnúť ?

Vďaka Marcel

  Private Sub posli()
        If ListBox1.SelectedIndex = ListBox1.Items.Count - 1 Then
            Timer2.Enabled = False
            ListBox1.SelectedIndex = 0
            Me.ListBox1.SelectionMode = System.Windows.Forms.SelectionMode.MultiExtended
            MsgBox("odoslaných dáta: " & ListBox1.Items.Count, MsgBoxStyle.Information)
            Form2.Close()
        Else
            Form2.ProgressBar1.Increment(100 / ListBox1.Items.Count)
            Form2.Label2.Text = Form2.ProgressBar1.Value & (" %")
            ListBox1.SelectedIndex += 1
        End If
    End Sub

nahlásit spamnahlásit spam 0 odpovědětodpovědět

Keď 100% je 31 položiek, tak predsa nastavte Maximum ProgressBaru na 31 a do Value dáte index práve odosielanej položky.

http://msdn.microsoft.com/en-us/library/...

http://msdn.microsoft.com/en-us/library/...

nahlásit spamnahlásit spam 1 / 1 odpovědětodpovědět

super toto mi funguje ale mi vznikol ešte jeden problém

Label.text mi teraz vypisuje hodnotu aj s desatinimi miestami a to nie pekne vyzera ked tam je napr 15,625% atd.

Ako sa da ten Label.text orezať iba na cele cisla ?

Skušal som to cez "\" ale potom to nevypisuje dobre až do 100%

 Private Sub posli()
        If ListBox1.SelectedIndex = ListBox1.Items.Count - 1 Then
            Timer2.Enabled = False
            ListBox1.SelectedIndex = 0
            Me.ListBox1.SelectionMode = System.Windows.Forms.SelectionMode.MultiExtended
            MsgBox("odoslaných dát: " & ListBox1.Items.Count, MsgBoxStyle.Information)
            Form8.Close()
        Else
            Form2.ProgressBar1.Maximum = ListBox1.Items.Count
            Form2.ProgressBar1.Increment(1)
            Dim x As Single = 100 / ListBox1.Items.Count
            Form8.Label2.Text = ListBox1.SelectedIndex * x + 2 * x & (" %")
            ListBox1.SelectedIndex += 1
        End If
    End Sub

nahlásit spamnahlásit spam 0 odpovědětodpovědět

K tomu slouží metoda string.format

Podívejde se zde na její popis, má hromadu možností: http://msdn.microsoft.com/cs-cz/library/...

nahlásit spamnahlásit spam 1 / 1 odpovědětodpovědět

Alebo System.Math.Round

nahlásit spamnahlásit spam 1 / 1 odpovědětodpovědět

To není to samé, system.math.round číslo zaokrouhlí. String.format nastaví řetězci požadovaný formát, přičemž původní hodnota zůstane zachována bezezměny. Navíc String.format je možné aplikovat i na jiné datové typy než jen číslo.

nahlásit spamnahlásit spam 1 / 1 odpovědětodpovědět

A ako a kde mam ten String.Format zapísať ? lebo tu skúšam všeličo ale mi to dajak nefunguje.

Vďaka Marcel

nahlásit spamnahlásit spam 0 odpovědětodpovědět
String.format(tvojecislo,“0,00“)
nahlásit spamnahlásit spam 1 / 1 odpovědětodpovědět

stale mi to vypisuje v desatinych čislach...

dal som to takto

 ...
 Form2.ProgressBar1.Maximum = ListBox1.Items.Count
 Form2.ProgressBar1.Increment(1) 
 Dim x As Single = 100 / ListBox1.Items.Count

 Dim output As String = ListBox1.SelectedIndex * kolko + 2 * kolko & ("%")
 Form8.Label2.Text = String.Format(output, "0,00")
 
 ListBox1.SelectedIndex += 1
 ...

nahlásit spamnahlásit spam 0 odpovědětodpovědět

podarilo sa mi to vyriešiť takýmto sposobom ale aj tak tam je ešte 1 desatine miesto...

 Dim x As Single = 100 / ListBox1.Items.Count
 Form8.Label2.Text = String.Format("{0:P1}", (ListBox1.SelectedIndex * x + 2 * x) * 0.01)

nahlásit spamnahlásit spam 0 odpovědětodpovědět

Použijte funkci Ceiling a nemusíte se zabívat formátováním

 Dim x As Single = Math.Ceiling(100 / ListBox1.Items.Count)

nahlásit spamnahlásit spam 0 odpovědětodpovědět

môžeš aj rovno zadať hodnotu progressbar.value =

nahlásit spamnahlásit spam 0 odpovědětodpovědět
                       
Nadpis:
Antispam: Komu se občas házejí perly?
Příspěvek bude publikován pod identitou   anonym.
  • Administrátoři si vyhrazují právo komentáře upravovat či mazat bez udání důvodu.
    Mazány budou zejména komentáře obsahující vulgarity nebo porušující pravidla publikování.
  • Pokud nejste zaregistrováni, Vaše IP adresa bude zveřejněna. Pokud s tímto nesouhlasíte, příspěvek neodesílejte.

přihlásit pomocí externího účtu

přihlásit pomocí jména a hesla

Uživatel:
Heslo:

zapomenuté heslo

 

založit nový uživatelský účet

zaregistrujte se

 
zavřít

Nahlásit spam

Opravdu chcete tento příspěvek nahlásit pro porušování pravidel fóra?

Nahlásit Zrušit

Chyba

zavřít

feedback