Announcement

Collapse
No announcement yet.

TextBox EventHandler mit zusätzlichen Variablen

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • TextBox EventHandler mit zusätzlichen Variablen

    Hallo,

    ich würde gerne ein MouseMove Event auf eine Textbox ausüben. Die klassische Event Variante funktioniert auch wunderbar, also:
    [highlight=c#]
    TextBox b1 = new TextBox();

    b1.MouseMove += new MouseEventHandler (MouseMove);

    ...


    public void MouseMove(object sender, MouseEventArgs e)
    {
    ...;
    }
    [/highlight]
    allerdings würde ich gerne neben dem sender und dem eventargs eine zusätzliche Variable mitgeben (z. B. einen String). Der String hat nichts mit der Textbox zu tun und kann deshalb auch leider nicht über den sender abgefragt werden, da dieser aber verarbeitet werden soll, sobald das MouseMove Event greift, brauche ich diesen als Extravariable.

    Wie schaffe ich es ein Event zu deklarieren, welches mir neben dem sender und dem eventargs auch einen String zum bearbeiten angibt.

    also sowas in dieser Art:
    [highlight=c#]
    public void MouseMove(object sender, MouseEventArgs e, string message)
    {
    System.Console.WriteLine(message);
    ...
    }
    [/highlight]
    Hab schon viel rumprobiert, komme aber nicht auf die Lösung.

    Danke für die Hilfe.

    mfg
    stash
    Zuletzt editiert von gfoidl; 31.08.2010, 13:44.

  • #2
    - Textbox ableiten
    - In der abgeleiteten Textbox OnMouseMove überschreiben.
    - dort einen eigenen Event der aussieht wie MouseMove, aber deinen String zusätzlich enthält, feuern.

    Erzähl uns lieber warum du dort einen zusätzlichen string brauchst. Meist ist es Unsinn oder irgendein Missverständnis das man die Eventsignatur ändern will.

    Comment


    • #3
      hi,
      danke für die schnelle antwort. allerdings kann ich mit deiner beschreibung nicht so viel anfangen (bin im umgang mit events ziemlich unerfahren).

      warum ich einen zusätzlichen string brauche? ich habe Steuerelemente (z. b. Textboxen) die ich zur Laufzeit des Programms generiere. Dabei soll jede Textbox dieses MouseMove Event beinhalten. Über eine separate XML-Datei steht zu jeder Textbox, die ich im Programm generiere, zusätzliche Informationen. Diese zusätzlichen Informationen können nicht als Eigenschaftswerte der Textbox verwendet werden (zusätzliche Informationen sind kein Name, Länge oder Höhe ...) und deswegen bräuchte ich zusätzlich einen String, der mir diese Informationen mitliefert. Beim Aufruf des Events bzw. Deklarieren kann ich diesen String angeben. Natürlich könnte ich mir diesen String auch wieder zusammensuchen, sobald das Event ausgelöst ist, aber es gibt ja anscheinend eine Möglichkeit, zusätzliche Variablen beim Event zu deklarieren.

      Ich weiß, Codebeispiele werden nur ungern gepostet, aber vielleicht könntest du mir doch ein wenig Code präsentieren, mit dem ich dann was anfangen kann.

      Gruß
      stash

      Comment


      • #4
        Da würde ich nicht den Event erweitern sondern die Zusatzinformation mit dem entsprechenden Control in einem Dictionary verwalten und dann im MouseMove Event mir die Daten aus dem Dictionary holen.


        [Highlight=C#]//Definition
        private Dictionary<TextBox, string> meineLiebenZusaetlichenInformationen = new Dictionary<TextBox, string>();

        //dort wo du die Textboxen erzeugst auch das Dictionary befüllen z.B.
        TextBox t1 = new TextBox();
        t1.Location = new Point(100, 100); // irgendeine Initialisierung
        t1.MouseMove += MouseMoveHandler; // EventHandler verdrahten
        meineLiebenZusaetlichenInformationen.Add(t1, "zusätzliche Info"); // zusätzliche Info verwalten
        this.Controls.Add(t1); // der Form hinzufügen

        //der MouseMove EventHandler
        private void MouseMoveHandler(object sender, MouseEventArgs e)
        {
        TextBox t = sender as TextBox;
        if(t != null)
        {
        // irgendwas sinnvolles mit der zusätzlich Info anstellen
        t.Text = meineLiebenZusaetlichenInformationen[t];
        }
        }[/Highlight]

        Comment


        • #5
          Hallo,

          entweder so wie Ralf vorgeschlagen oder vom Control ableiten und dort die zusätzliche Eigenschaft ergänzen.
          Ev. hierzu direkt von Control ableiten -> MyControl und dieses als Basis für die anderen Steuerelemente welche diese zusätzliche Eigenschaft brauchen. Da es jetzt aber in C# keine Mehrfachvererbung gibt müssen dazu Schnittstellen verwendet werden. Der Zugriff auf diese Eigenschaft erfolgt dann über die Schnittstelle.

          Wenn es wiederverwendbar sein sollte wären die Schnittstellen "besser", sonst ist Ralfs Vorschlag der "bessere".



          mfG Gü
          "Any fool can write code that a computer can understand. Good programmers write code that humans can understand". - Martin Fowler

          Comment


          • #6
            Mal ganz abgesehen davon, dass bestimmt nicht die TextBox irgendwelche Eigenschaften haben sondern die Daten dahinter Aber das ist wieder eine andere Geschichte.

            Comment


            • #7
              hallo,
              danke für die vorschläge. das beispiel mit dem dictionary hat super geklappt und ist glaube ich der unkomplizierteste Vorschlag.

              Vielen Dank

              Comment

              Working...
              X