2012-04-10 10 views
1

Der Code unten sollte den Text nach rechts ausrichten, wenn der Text länger als das Textfeld anzeigen kann, andernfalls wird es linksbündig beibehalten.TextBox.Text stimmt nicht richtig

Das Problem ist, dass es dies nicht wirklich tut und es wirkt wirklich merkwürdig. Kurze Saiten enden manchmal rechtsbündig und lange Saiten sind immer linksbündig.

Was mache ich falsch?

private void textBoxCurrentConfig_TextChanged(object sender, EventArgs e) 
{ 
    SizeF stringSize = new SizeF(); 
    stringSize = TextRenderer.MeasureText(textBoxCurrentConfig.Text, textBoxCurrentConfig.Font); 

    float currentTextWidth = stringSize.Width; 
    float allowedTextWidth = textBoxCurrentConfig.Size.Width - 10; 

    if (currentTextWidth >= allowedTextWidth) // if the text we want to display is larger than the textbox can hold, right justify it to show the filename 
    { 
     textBoxCurrentConfig.TextAlign = HorizontalAlignment.Right; // right justify     
    } 
    else // otherwise we can display the entire path 
    { 
     textBoxCurrentConfig.TextAlign = HorizontalAlignment.Left; // left justify 
    } 

    textBoxCurrentConfig.Refresh(); 
    this.Refresh(); 
} 
+0

Welche Zahlen erhalten Sie für 'current ...' und 'allowed ...'? Funktioniert es, wenn Sie es debuggen? – Jodrell

+0

Ich habe den Code getestet, indem ich ihn durchgegangen bin. Die Zahlen machen Sinn und die Logik funktioniert gut. Es ist die Ausrichtung, die mich hier rausschmeißt. – Kashif

+0

@Kashif Verwenden Sie WinForms? Aus dem Code sieht es aus, dass Sie die Cursorposition entsprechend der Textlänge festlegen. Wenn das der Fall ist, können Sie die Methode textBoxCurrentConfig.Select() verwenden. – ABH

Antwort

2

Wie aus Ihren Kommentaren zu entfernen, Sie wollen nach Cursor-Position bewegen, die Textlänge. Sie können dazu die Methode TextBox.Select() verwenden. Check MSDN for details.

Also, wenn Sie den Cursor an den Anfang des Textes verschieben möchten, können Sie

textBoxCurrentConfig.Select(0, 0);

verwenden, und wenn Sie den Cursor am Ende des Textes bewegen möchten, können Sie

verwenden textBoxCurrentConfig.Select(textBoxCurrentConfig.Text.Length, 0);

0

Try

this.Refresh(); 

Es ist möglicherweise die Seite führen zu aktualisieren und senden Sie das Textfeld an die Original-align

+0

Ich habe versucht alle Kombinationen von this.Refresh(); und textBoxCurrentConfig.Refresh(); ohne Glück =/ – Kashif

+0

hast du das CSS überprüft? – David

+0

Sie müssen ein bisschen mehr erklären. Ich fürchte, ich weiß nichts über CSS – Kashif