Announcement

Collapse
No announcement yet.

Frage zum Textbox-Standard-Kontextmenü

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

  • Frage zum Textbox-Standard-Kontextmenü

    Hallo zusammen,

    ich muss in meiner Anwendung (VS2010, .net 4.0) mitbekommen, wenn jemand über das Standard-Kontextmenü der Textbox etwas einfügt oder auschneidet. Denn nur, wenn der Benutzer den Text geändert hat, sei es durch Eingabe, über die Tastenkombinationen Strg+X und Strg+V oder aber über eben jenes Kontextmenü, sollen weitere Aktionen (das passiert dann im LostFocus-Event) ausgelöst werden.
    Eingabe von Text (oder auch löschen) und die Tastenkombinationen bekomme ich mit und kann dann der Textbox sagen, dass sie vom Benutzer geändert wurde.
    Aber was kann ich tun, wenn der Benutzer über das Kontextmenü Einfügen oder Ausschneiden wählt?
    Hat da jemand einen Tipp für mich?

    Danke schon mal und viele Grüße
    Andi

  • #2
    Solltest du nicht immer ein TextChanged bekommen egal wie sich der Text geändert hat? Oder musst du tatsächlich unterscheiden ob jemand zum Beispiel 'A' reingeschrieben oder 'A' reingepastet hat?
    In dem Fall könnte man die WndProc der TextBox überschrieben und dort WM_PASTE und WM_CUT abfangen.

    Comment


    • #3
      Das Problem mit dem TextChange-Event ist folgendes. Es wird auch gefeuert, wenn zb. Text aus einer Datenbank in die Textbox geschrieben wird, oder aber auch wenn so eine von mir oben genannte Folge-Aktion geschieht. Diese könnte zb. so aussehen, das geprüft wird, ob der Benutzer den Text überhaupt hätte Ändern dürfen. Diese Überprüfung passiert bei mir in einer, am Programm angeschlossenen Regelwerkengine. Diese Regelwerke können auch Texte in die Textboxen schreiben, was auch das TextChange-Event heraufbeschwört. Ich muss also der Anwendung vorher schon sagen: Achtung, da kommt was vom Benutzer. Im Fall der Eingabe und der Tastenkombinationen kann ich das sehr gut im KeyDown-Event machen. Regelwerke drücken keine Tasten
      Im Fall des Kontextmenüs hab ich da aber dann echt ein Problem.
      Mit der WndProc kenn ich mich leider gar nicht aus. Hast du da vielleicht ein Beispiel? Nach allem was ich schon probiert hab, scheint das wohl die einzige Möglichkeit zu sein, an eine Lösung meines Problems zu kommen.

      Comment


      • #4
        Hilft dir auch was in c#? VB hab ich seit Ewigkeiten nicht mehr gemacht und aus schnell was zusammenwerfen würde da plötzlich Arbeit draus werden wenn ich mich an VB erinnern müsste

        Comment


        • #5
          C# tut es auch

          Comment


          • #6
            Eine Textbox die sich merkt ob eine Operation aus dem Copy&Paste Umfeld aufgetreten ist (solange sie den Focus hat).

            [Highlight=C#][Flags]
            public enum MonitoredOperation { None, Cut, Copy, Paste, Clear, Undo }

            public class MeineLiebeTextBox : TextBox
            {
            protected override void WndProc(ref Message m)
            {
            switch (m.Msg)
            {
            case 0x0300: /* WM_CUT */
            OccuredOperationWhileFocussed |= MonitoredOperation.Cut;
            break;
            case 0x0301: /* WM_COPY */
            OccuredOperationWhileFocussed |= MonitoredOperation.Copy;
            break;
            case 0x0302: /* WM_PASTE */
            OccuredOperationWhileFocussed |= MonitoredOperation.Paste;
            break;
            case 0x0303: /* WM_CLEAR */
            OccuredOperationWhileFocussed |= MonitoredOperation.Clear;
            break;
            case 0x0304: /* WM_UNDO */
            OccuredOperationWhileFocussed |= MonitoredOperation.Undo;
            break;
            default:
            break;
            }
            base.WndProc(ref m);
            }

            public MonitoredOperation OccuredOperationWhileFocussed { get; set; }

            protected override void OnLeave(EventArgs e)
            {
            base.OnLeave(e);
            OccuredOperationWhileFocussed = MonitoredOperation.None; // reset
            }

            }[/Highlight]

            Comment


            • #7
              Das passt perfekt und funktioniert wunderbar.
              Danke Ralf

              Comment

              Working...
              X