Laden...

u-Taste springt zur nächsten TextBox / Tab-Taste springt zur nächsten TextBox

Erstellt von ibaxx vor 13 Jahren Letzter Beitrag vor 13 Jahren 5.210 Views
I
ibaxx Themenstarter:in
90 Beiträge seit 2007
vor 13 Jahren
u-Taste springt zur nächsten TextBox / Tab-Taste springt zur nächsten TextBox

Hallo,

ich bearbeite auf auf Arbeit ein Projekt wo eine kuriosität in der Form vorkommt.
die Form ist im Windows Explorer eingebunden.
Wenn ich in eine Textbox ein u eingebe, springt der Cursor in die nächste Textbox.
Wenn ich ein Tab drücke springt er 2 Textboxen weiter.

Der Kollege der das Programmiert hat ist leider nicht mehr greifbar, und ich kann mir nicht erklären wo dies eingestellt sein soll.

MfG
Ingo

49.485 Beiträge seit 2005
vor 13 Jahren

Hallo ibaxx,

naja, aber du hast doch den Code. Da solltest du schnell sehen, welche Tasten wie behandelt werden. Erste Kandidaten wären KeyUp/Press/Down. Aber sowas kann natürlich auch woanders stehen, z.B. in der WndProc.

herbivore

I
ibaxx Themenstarter:in
90 Beiträge seit 2007
vor 13 Jahren

Hallo herbivore,

leider find ich nichts im Code, auch ein Kollege hat schon drüber geschaut.
Wo find ich denn die WncProc?

MfG
Ingo

1.665 Beiträge seit 2006
vor 13 Jahren

WndProc, protected, virtual

in jedem Control.

I
ibaxx Themenstarter:in
90 Beiträge seit 2007
vor 13 Jahren

Hallo,

leider find ich die absolut nicht.

MfG
Ingo

49.485 Beiträge seit 2005
vor 13 Jahren

Hallo ibaxx,

naja, geben tut es die schon in jedem Control. Wird ja von Control geerbt. Aber überschrieben muss sie natürlich nicht zwangsläufig sein. Wenn sie also im Code nicht auftaucht, dann passiert da drin auch nichts, was das beschriebene Verhalten erklären würde. Was ich genannt habe, waren ja auch nur Beispiele. Da das beschriebene Verhalten nicht Standard ist, ist die Wahrscheinlichkeit nahe 100%, dass im Code was zu finden ist. Baller im Zweifel mal alles mit Breakpoints voll und drücke dann die U-Taste.

herbivore

I
ibaxx Themenstarter:in
90 Beiträge seit 2007
vor 13 Jahren

Hallo nochmal,

Breakpoints kann ich leider nicht setzen, da es eine Explorer Extension ist und nicht gedebuggt werden kann.

ich habe alles nach "key" durchsucht, aber auch nichts interessantes gefunden.

MfG
Ingo

S
211 Beiträge seit 2010
vor 13 Jahren

Es muss ja theoretisch kein Key-Event sein, es könnte sich auch um ein TextBox Event handeln (auch wenn ich keinerlei Gründe wüsste wieso man sowas machen sollte).

Hast du dir mal alle Events angeschaut dies so gibt in dem Programm ?

I
ibaxx Themenstarter:in
90 Beiträge seit 2007
vor 13 Jahren

also die Textboxen, haben bis auf eine alle keine Events...

das einzige was ich mit einem key-Ereignis finde ist folgendes:


            if ((e.KeyState & KeyStates.CtrlKeyDown) != 0 && (e.KeyState & KeyStates.ShiftKeyDown) != 0)
                e.Effect = DragDropEffects.Link;
            else if ((e.KeyState & KeyStates.ShiftKeyDown) != 0)
                e.Effect = DragDropEffects.Move;
            else
                e.Effect = DragDropEffects.Copy;

wobei hier ja ersichtlich ist, das kein u oder tab ausgewertet wird.
zudem ist dies in einer Funktion, die nichts mit der GUI zu tun hat

795 Beiträge seit 2006
vor 13 Jahren

Guck mal in der Form bei KeyDown/Up/Press. Wenn diese Nämlich KeyPreview=true gesetzt hat, behandelt diese alle TastaturEvents zuerst.

Gruß, Christian.

`There are 10 types of people in the world: Those, who think they understand the binary system Those who don't even have heard about it And those who understand "Every base is base 10"`
I
ibaxx Themenstarter:in
90 Beiträge seit 2007
vor 13 Jahren

Wenn diese Nämlich KeyPreview=true gesetzt hat, ...

nichts gesetzt... aber danke für den tipp

1.665 Beiträge seit 2006
vor 13 Jahren

Erstell dir eine eigene TextBox-Klasse, die von System.Windows.Forms.TextBox erbt und überschreibe =>

protected override void WndProc(ref Message m)
{
    // Auf WM für key up prüfen
    if (m.Msg == <Windows-Message Code>) // Auflistung unter pinvoke.com, Stichwort: WM, Windows Messages
    {
        
    }
}

Damit übersteuerst du die ganzen Events usw.

Siehe auch, ProcessCmdKey, ProcessX... auf System.Windows.Forms.Control.

I
ibaxx Themenstarter:in
90 Beiträge seit 2007
vor 13 Jahren

So nun erben lassen:


    class TextBoxNew : System.Windows.Forms.TextBox
    {
        protected override void WndProc(ref Message m)
        {
            // Auf WM für key up prüfen
            //if (m.Msg == <Windows-Message Code>) // Auflistung unter pinvoke.com, Stichwort: WM, Windows Messages
            //{
            MessageBox.Show(m.Msg.ToString());
            //}
        }


    }

Wie bette ich diese jetzt in die Form ein?
oder wie sage ich den Textboxen, dass diese jetzt von der Klasse sind?

MfG
Ingo

I
ibaxx Themenstarter:in
90 Beiträge seit 2007
vor 13 Jahren

so jetzt hab ichs hinbekommen, nur dass der designer folgende Fehler meldet:

Fehlermeldung:
Error creating window handle.

Instances of this error (7)

  1. Hide Call Stack

at System.Windows.Forms.NativeWindow.CreateHandle(CreateParams cp)
at System.Windows.Forms.Control.CreateHandle()
at System.Windows.Forms.ComboBox.CreateHandle()
at System.Windows.Forms.Control.CreateControl(Boolean fIgnoreVisible)
at System.Windows.Forms.Control.CreateControl()
at System.Windows.Forms.Control.ControlCollection.Add(Control value)
at System.Windows.Forms.Design.ControlDesigner.DesignerControlCollection.Add(Control c)

  1. Show Call Stack

at System.Windows.Forms.NativeWindow.CreateHandle(CreateParams cp)
at System.Windows.Forms.Control.CreateHandle()
at System.Windows.Forms.ComboBox.CreateHandle()
at System.Windows.Forms.Control.CreateControl(Boolean fIgnoreVisible)
at System.Windows.Forms.Control.CreateControl()
at System.Windows.Forms.Control.ControlCollection.Add(Control value)
at System.Windows.Forms.Design.ControlDesigner.DesignerControlCollection.Add(Control c)

Ich sehe auch die Form nicht mehr

1.665 Beiträge seit 2006
vor 13 Jahren

Eigentlich war herbivores 1. Stichwort zu WndProc für dich Anlass genug, danach zu googlen, Implementierungen anzuschauen, usw.

Meinem Beispiel fehlt noch der base-Aufruf zu dieser Methode. Das wäre in diesem Fal:

base.WndProc(ref m);

Für gewöhnlich am Anfang der Methode.

1.820 Beiträge seit 2005
vor 13 Jahren

Hallo!

@ibaxx:
Nimm' bloss schnell MessageBox.Show wieder raus: Je nachdem was deine Anwendung macht, kriegst du pro Sekunde bis zu einem Dutzend nachrichten, die dir den Bildschirm mit MessageBoxen vollhauen. Schreib die Daten lieber in die Debug-Konsole oder eine Textdatei.
Und der Fehler könnte auftreten, weil die ersten nachrichten angezeigt werden sollen, obwohl das handle des Hauptfensters noch nicht erstellt wurde.

Evtl. wird auch ein Event oder die KeyPreview-property nicht direkt in der Hauptform sondern im Designer-Code oder durch eine andere Komponente/Klasse gesetzt, vielleicht gibt es da noch Abhängigkeiten oder Erweiterungen.

Nobody is perfect. I'm sad, i'm not nobody 🙁

5.299 Beiträge seit 2008
vor 13 Jahren

hast du schon eine volltextsuche übers ganze projekt gemacht, nach Key (Großschreibung beachten, nicht nur das ganze Wort suchen)?

Der frühe Apfel fängt den Wurm.

731 Beiträge seit 2006
vor 13 Jahren

Das mit der Tab-Taste und 2 Controls weiter springen kann ja ganz einfach am TabIndex der Controls liegen. Das mit der u-Taste kann ich mir noch nicht erklären. 😃

MfG
wax