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.
|