Zakázání kliknutí na tlačítko dokud se ještě provádí kód po předchozím kliknutí   zodpovězená otázka

VB.NET, WinForms

Zdravím.

V aplikaci jsou čtyři tlačítka, které obsluhují 2xListView (věrné kopie)

po spuštění aplikace dojde k počátečnímu naplnění

Sub inicializace()

        For x1 As Integer = 1 To 5
            Dim a As New ListViewItem()
            a.Text = 1
            a.SubItems.Add(0)
            a.SubItems.Add("")
            a.SubItems.Add(0)
            a.SubItems.Add("")
            Form1.ListView2.Items.Add(a)
        Next

        For x2 As Integer = 1 To 5
            Dim a1 As New ListViewItem()
            a1.Text = 1
            a1.SubItems.Add(0)
            a1.SubItems.Add("")
            a1.SubItems.Add(0)
            a1.SubItems.Add("")
            Form1.ListView3.Items.Add(a1)
        Next

    End Sub

Kod pro čtyři tlačítka

    Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click
        If LabelPocetStanic.Text = 1 Then Exit Sub
        ' Snížení počtu stanic o 1
        Dim x As Integer = CInt(LabelPocetStanic.Text)
        LabelPocetStanic.Text = x - 1

        ' Výpočet čísla indexu poslední operace, poslední stanice
        Dim IndxPoslOp As Integer
        IndxPoslOp = (LabelPocetStanic.Text * LabelOperacinastanici.Text)

        'Vymazání všeho ostatního
        For x1 As Integer = ListView2.Items.Count To IndxPoslOp + 1 Step -1
            ListView2.Items.RemoveAt(x1 - 1)
            ListView3.Items.RemoveAt(x1 - 1)
        Next
    End Sub

    Private Sub Button3_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button3.Click
        ' Zvýšení počtu stanic o 1
        If LabelPocetStanic.Text = 30 Then Exit Sub

        Dim x As Integer = CInt(LabelPocetStanic.Text)
        LabelPocetStanic.Text = x + 1

        ' Vložení příslušného počtu řádků
        For x1 As Integer = 1 To CInt(LabelOperacinastanici.Text)
            Dim x2 As New ListViewItem()
            Dim x3 As New ListViewItem()
            x2.Text = x + 1
            x2.SubItems.Add(0)
            x2.SubItems.Add("")
            x2.SubItems.Add(0)
            x2.SubItems.Add("")
            ListView2.Items.Add(x2)
            x3.Text = x + 1
            x3.SubItems.Add(0)
            x3.SubItems.Add("")
            x3.SubItems.Add(0)
            x3.SubItems.Add("")
            ListView3.Items.Add(x3)
        Next
    End Sub

    Private Sub Button5_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button5.Click
        ' Zvýšení počtu operací na stanici o jedna
        If LabelOperacinastanici.Text = 30 Then Exit Sub

        Dim x As Integer = CInt(LabelOperacinastanici.Text)
        LabelOperacinastanici.Text = x + 1

        For x1 As Integer = 1 To CInt(LabelPocetStanic.Text)
            Dim x2 As New ListViewItem()
            Dim x3 As New ListViewItem()
            x2.Text = x1
            x2.SubItems.Add(0)
            x2.SubItems.Add("")
            x2.SubItems.Add(0)
            x2.SubItems.Add("")
            x3.Text = x1
            ListView2.Items.Insert((x1 * LabelOperacinastanici.Text) - 1, x2)
            x3.SubItems.Add(0)
            x3.SubItems.Add("")
            x3.SubItems.Add(0)
            x3.SubItems.Add("")
            ListView3.Items.Insert((x1 * LabelOperacinastanici.Text) - 1, x3)
        Next
    End Sub

    Private Sub Button4_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button4.Click
        ' Snížení počtu operací na stanici o jedna
        If LabelOperacinastanici.Text = 5 Then Exit Sub
        Dim x As Integer = CInt(LabelOperacinastanici.Text)
        LabelOperacinastanici.Text = x - 1

        'Vymazání řádků
        For x1 As Integer = LabelPocetStanic.Text To 1 Step -1
            ListView2.Items.RemoveAt((x1 * LabelOperacinastanici.Text) - 1)
            ListView3.Items.RemoveAt((x1 * LabelOperacinastanici.Text) - 1)
        Next

    End Sub

Pokud mám už ale počet stanic vysoký a zároveň počet operací na stanici vysoký, tak když pak klikám "mohutně" na tlačítka ve smyslu rychle změnit na jiný počet, tak se mi stane, že pak v prvním sloupečku mám čísla dosti přeházená (popsat je to složitější, lepší je spíš vyzkoušet)

Teď, když na tom přemýšlím, tak mě napadá jedna věc. Po kliknutí nastavit tlačítku Enabled = false a na konci cyklu ho zase zapnout: enabled = true

Každopádně otázka je zda to jde i jinak?

Do budoucna.

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

Já to většinou řeším tak, že když nechci aby mohl uživatel něco měnit nebo na něco klikat, tak prostě na začátku procedury nastavím Me.Enabled=False a na konci zase na True. Prostě a jednoduše bloknu celý příslušný formulář a tím mám jistotu že mi tam uživatel nebude provádět žádné psí kusy dokud procedura nedoběhne. Občas se to hodí.

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