Jump to content

[C#] Callbacks


Recommended Posts

Servus,

 

hab mal wieder ein "noob" problem...

Ich hab mir eine "WinForm" Application zusammengeclickt ;-). Ich habe auch schon meine ganzen Bricklets usw erfolgreich angebunden.

 

Die Anbindung an "ipcon" geschieht in der Form1_Load-Funktion.

Ich hab dann noch ein Callback fürs LCD registriert

lcd.RegisterCallback(new BrickletLCD20x4.ButtonPressed(PressedCB));

Klappt auch super. ich kann schon mit folgendem Code eine MessageBox ausgeben die die Nummer des gedrückten Buttons enthält:

void PressedCB(byte button)
        {
            if (InvokeRequired)
            {
                // We're not in the UI thread, so we need to call BeginInvoke
                BeginInvoke(new DelegatLCD(PressedCB), new object[] { button });
                return;
            }
            MessageBox.Show(button.ToString());
            
        }

Ich würde jetzt aber z.B. gern mal das LCD-Backlight anschalten. Wie hab ich jetzt Zugriff auf die entsprechenden Methoden?? :)

 

schon mal danke!

Gruß

Christian

Link to comment
Share on other sites

Dein LCD-Device sollte halt von dort aus erreichbar sein. Beispielsweise geht das, indem du das LCD-Device als Instanz-variable vorhälst:

 

class MyCoolForm
{
  private Device MyLCD;
  ...
  public void MyCoolForm_Load(someArgumentsIDontRemember)
  {
     ...
     MyLCD = new BrickletLCD20x4("aCooLU1D");
     ...
  }
  ...
  void PressedCB(byte button)
  {
    MyLCD.DoWhatEverYouWant();
  }
}

 

Hoffe das Beispiel hat geholfen die Idee klarzumachen ^^

 

P.S.: Ich habe auf GitHub bereits vorgeschlagen Callbacks per C#-Event umzusetzen (wirst du kennengelernt haben wenn du mit WinForms arbeitest). Dabei gibt es auch immer ein sender-object. Hier hättest du direkt die möglichkeit dieses zu nutzen, da das in dem Fall das LCD wäre.

Link to comment
Share on other sites

Vielen dank erst mal...

also ich hab jetzt mal oben in der class folgendes eingefügt:

private Device lcd;

 

jetzt "meckert" er schon nicht mehr beim Objekt (?) lcd in meiner funktion. Aber er kennt die Methode BacklightOn scheinbar nicht.

In der Autovervollständigung via STRG+Leer erscheint das auch nicht.

 

Fehler 2 "Tinkerforge.Device" enthält keine Definition für "BacklightOn", und es konnte keine Erweiterungsmethode "BacklightOn" gefunden werden, die ein erstes Argument vom Typ "Tinkerforge.Device" akzeptiert. (Fehlt eine Using-Direktive oder ein Assemblyverweis?) D:\DOKUMENTE\Visual Studio 2010\Projects\Tinter Test V2\Tinter Test V2\Form1.cs 86 17 Tinter Test V2

Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

×
×
  • Create New...