pořadí stisku butonů   zodpovězená otázka

VB.NET, WinForms

Dobrý den,

mohl by jste mi někdo prosím poradit, jak zjistit v jakém pořadí byla stisknuta tlačítka na formu. Dám příklad: Mám např.25 buttonů, vždy se musí stisknout 2 buttony (např.: b1 a b17 nebo b9 a b11), aby se provedla funkce... Potřebuji tedy, aby po stisku v pořadí druhého buttonu program zjistil, které buttony uživatel stiskl a podle toho pak provedl danou funkci, podotýkam jen že pro každou kombinaci buttonů bude jiná funkce. Zatím jsem to řešil pomocí proměnné a písmen abecedy, jejich ověření

Public Sub OverVolbu(ByVal volba)
        Select Case volba
            Case "AB"
                PripravCestu(volba)
            Case "AC"
                PripravCestu(volba)
        End Select

        If Len(My.Forms.Form1._Volba) = 2 Then My.Forms.Form1._Volba = String.Empty
    End Sub

a pokud proměnna byla dlouhá 2 znaky tak se vymazala. Ale asi to není to pravé Děkuji

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

Nevím, jak se to řeší "profesionálně", ale myslím si, že v zásadě ta Vaše cesta bude správná.

Možnost, že by si program sám počkal, až zmáčknete několik tlačítek a pak vyhodnocoval jejich pořadí si nedovedu představit - budete tedy muset:

1) vyhodnotit stisk každého tlačítka

2) pokud jde o první stisk, někam si zaznamenat, které tlačítko bylo stisklé

3) pokud se jedná o druhý stisk, vytáhnout tu zaznamenanou hodnotu a spolu s kódem druhého tlačítka poslat na zpracování, současně ten záznam smazat a uvolnit pro další volbu

Otázkou pak jenom zůstává, jaké technologie k tomu použijete.

Jednak jak si budete "pamatovat" ona tlačítka a v čem si to budete pamatovat.

Těch možností je jistě mnoho, a která je nejsprávnější nechť poradí zkušení bardi (jestli je správné použít frontu,...), ale pro tak jednoduchou záležitost bych to asi řešil obyčejnou pomocnou proměnnou přesně tak, jak naznačujete vy. Otázkou zůstává, je-li nejefektivnější pro pamatování použít String. Záleží také na následujícím zpracování, je-li Váš algoritmus možno optimalizovat na postupné rozhodování dle tlačítek (tj. jestli napřed provést větvení dle prvního zmáčknutého tlačítka, provést nějaké společné úkony a až poté větvit dle druhého tlačítka, nebo je-li váš algoritmus pro každou kombinaci tlačítek absolutně unikátní a má smysl tedy větvení pouze na základě konkrétního dvojkliku.

Abych pouze neteoretizoval, osobně bych to řešil nějak takto:

Public Class Form1
    Private tlac As Integer = -1


    Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
        ' vytvořím 25 tlačítek
        For i As Integer = 0 To 24
            Dim tl As New Button
            tl.Width = 40
            tl.Height = 25
            tl.Text = "b" & i.ToString
            tl.Tag = i
            tl.Left = (i Mod 5) * 50 + 10
            tl.Top = (i \ 5) * 30 + 30
            AddHandler tl.Click, AddressOf Button_Click
            Controls.Add(tl)
        Next
    End Sub

    Private Sub Button_Click(ByVal sender As System.Object, ByVal e As System.EventArgs)
        If tlac < 0 Then
            tlac = 100 * CType(sender, Button).Tag
        Else
            vyhodnoceni(tlac + CType(sender, Button).Tag)
            tlac = -1
        End If
    End Sub
    Private Sub vyhodnoceni(ByVal tlacitka As Integer)
        Select Case tlacitka
            Case 1
                MsgBox("Nastav cestu b0 -> b1")
            Case 100
                MsgBox("Nastav cestu b1 -> b0")
                ' atd. - ošetřit všechny platné kombinace tlačítek
                ' (kód kombinace je dán číslem 100*číslo prvního zmáčknutého tlačítka
                ' + číslo druhého tlačítka
            Case Else
                MsgBox("Neplatná kombinace vstupů")
        End Select
    End Sub
End Class

jinak řečeno, do Tagu každého tlačítka bych si pro jednoduchost vložil jeho číslo (jako pomocnou hodnotu a pro jednodušší rozpoznávání a pamatování). Dále je funkcionalita asi patrná z kódu - skládal bych si v pomocné proměnné výsledný kód, který se skládá z čísla prvního zmáčknutého tlačítka (posunutého do řádu stovek a výše) a z čísla druhého tlačítka (v řádu jednotek a desítek). No a pak už si jenom v cyklu select vyselektuji a ošetřím kombinace tlačítek, které mne zajímají.

Je to tedy totéž, co jste naznačil vy.

nahlásit spamnahlásit spam 1 / 1 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