2012-04-10 25 views
1

私の理解によると、テキストはテキストがテキストよりも長い場合、以下のコードはテキストを右揃えにする必要があります。それ以外の場合は左揃えにします。TextBox.Text右揃えしない

問題は実際にはこれを実行せず、実際には奇妙に動作しているということです。短い文字列は右揃えになり、長い文字列は常に左揃えになります。

私は間違っていますか?

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

「現在の...」と「許可された」の数字は何ですか?あなたはそれをデバッグするときに動作しますか? – Jodrell

+0

私はそれを踏んでコードをテストしました。数字は理にかなっており、論理はうまく機能します。私はここで私を捨ててしまいます。 – Kashif

+0

@Kashif WinFormsを使用していますか?コードから、テキストの長さに応じてカーソル位置を設定するように見えます。その場合、textBoxCurrentConfig.Select()メソッドを使用できます。 – ABH

答えて

2

にテキストボックスをリフレッシュして返すために発生することがあり、あなたがに応じてカーソル位置を移動したいです

this.Refresh(); 

を削除するようにしてくださいテキストの長さこれにはTextBox.Select()メソッドを使用できます。 Check MSDN for details

ですから、テキストの先頭にカーソルを移動したい場合は、

textBoxCurrentConfig.Select(0, 0);

を使用することができますし、テキストの末尾にカーソルを移動したい場合は、

を使用することができますtextBoxCurrentConfig.Select(textBoxCurrentConfig.Text.Length, 0);

0

ページがあなたのコメントから、元の整列

+0

私は this.Refresh()のすべての組み合わせを試してみました。 および textBoxCurrentConfig.Refresh(); 運がない=/ – Kashif

+0

あなたはCSSをチェックしましたか? – David

+0

もう少し説明しなければなりません。私はCSSについて知識がありません – Kashif