Laden...

Backslash in textbox

Erstellt von Roman78 vor 9 Jahren Letzter Beitrag vor 9 Jahren 2.930 Views
R
Roman78 Themenstarter:in
18 Beiträge seit 2015
vor 9 Jahren
Backslash in textbox

Ich bin dabei ein Programm zu basteln das ein anderes Programm mit anderen Benutzer rechte starten soll. Es liest den Domain Namen aus und das funktioniert auch. Jetzt möchte ich es so andern das man (wie gewöhnt bei Windows) wenn man ein \ eingibt er das als Trennung zwischen Domain und User sehen soll. Er soll direkt beim eintippen von einem \ umspringen. Also habe ich diese bis jetzt, aber was ist das \

 private void textbox1_KeyDown(object sender, KeyEventArgs e)
        {
            if (e.KeyCode == Keys.????)
            { 
                   
            }
         }

Auf msdn kann ich nur OemBackslash finden, aber das funktioniert nicht. Und ein slash kann ich gar nicht finden.

https://msdn.microsoft.com/en-us/library/system.windows.forms.keys%28v=vs.110%29.aspx

J
251 Beiträge seit 2012
vor 9 Jahren

Guten Tag,

Jetzt ohne groß zu Überlegen.

Mit der Ausgangsposition, würde ich zuerst den altbekannten Debugger verwenden ([Artikel] Debugger: Wie verwende ich den von Visual Studio?) und mir KeyEventArgs anschauen.

Gruß
Jami

R
Roman78 Themenstarter:in
18 Beiträge seit 2015
vor 9 Jahren

Der Debugger greift hier nicht weil es nicht getriggert wird.

463 Beiträge seit 2009
vor 9 Jahren

Warum machst du es dir so schwer? Binde das Event tippe ein "" und schaue was in KeyEventArgs steht....

Ist die Benutzung des Debuggers denn so schwer?

R
Roman78 Themenstarter:in
18 Beiträge seit 2015
vor 9 Jahren

Da gibt er 219 bei KeyCode. Bringt nicht viel.

Habe jetzt:

 private void textbox1_KeyDown(object sender, KeyEventArgs e)
        {
            string text = textbox1.Text;
            if (!String.IsNullOrEmpty(text))
            {

            } 
}

Jetzt wird bei jedem Tastendruck die Routine gestartet, das geht so aber er läuft jetzt immer ein Tastendruck hinterher. Das heißt er liest den Inhalt von der textbox beim Tastendruck ohne die gedrückte taste mit zu nehmen.

2.207 Beiträge seit 2011
vor 9 Jahren
f (e.Key.ToString() == "219")

oder

if (e.PlatformKeyCode == 219)

?

ungetestet

Gruss

Coffeebean

463 Beiträge seit 2009
vor 9 Jahren

Jetzt wird bei jedem Tastendruck die Routine gestartet, das geht so aber er läuft jetzt immer ein Tastendruck hinterher. Das heißt er liest den Inhalt von der textbox beim Tastendruck ohne die gedrückte taste mit zu nehmen.

Ist logisch, dein Event wird aufgerufen wenn der Tastendruck ausgeführt wird, da ist der Text der Box noch nicht aktualisiert! Aber da du den Tastencode hast kannst du diesen ja ganz einfach anfügen... Ich muss gstehen - ich verstehe dein Problem echt nicht ganz. Wo hängs du denn gerade?

C
224 Beiträge seit 2009
vor 9 Jahren

Wenn ich mir die Enumeration anschaue steht da:


public enum Keys
...
        //
        // Zusammenfassung:
        //     Die OEM 4-TASTE.
        Oem4 = 219,
        //
        // Zusammenfassung:
        //     Die OEM-abhängige Taste mit der öffnenden Klammer auf einer US-Standardtastatur
        //     (Windows 2000 oder höher).
        OemOpenBrackets = 219,
...

Das sieht komisch aus. Ich würde lieber KeyPress verwenden:


private void txtSource_KeyPress(object sender, KeyPressEventArgs e)
        {
            txtResult.Text += e.KeyChar.ToString();
        }

_
Edit:
Formatierung korrigiert_

R
Roman78 Themenstarter:in
18 Beiträge seit 2015
vor 9 Jahren

Habe es jetzt mit KeyUp gemacht und dann jedes mal beim up die textbox einfach ausgelesen.

private void textbox1_KeyUp(object sender, KeyEventArgs e)
        {
            string text = textbox1.Text;
        if (!String.IsNullOrEmpty(text))
           {
                domain = text.Contains("\\");
                if (domain == true)
                {
                    string[] words = text.Split('\\');
                    ad = words[0];
                    user = words[1];
                }
                else
                {
                    ad = Environment.UserDomainName;
                    user = textbox1.Text;
                }
                label3.Text = "Domäne: " + ad;
            }
463 Beiträge seit 2009
vor 9 Jahren

So ist es besser:


private void textbox1_KeyUp(object sender, KeyEventArgs e)
{
     string text = textbox1.Text;
  
     if (!String.IsNullOrEmpty(text))
     {
  
                if (text.Contains("\\"))
                {
                    string[] words = text.Split('\\');
                    ad = words[0];
                    user = words[1];
                }
                else
                {
                    ad = Environment.UserDomainName;
                    user = textbox1.Text;
                }

                label3.Text = "Domäne: " + ad;

       }
}

Beachte auch: [Tipp] Anfängerfehler == true / == false

R
Roman78 Themenstarter:in
18 Beiträge seit 2015
vor 9 Jahren

Danke für den Tipp und den Link.