2010-12-02 60 views

答えて

5

のサイズよりもテキストのinputed lentghを制御する方法100 で使用MaxLength

EDIT:

待って、何?文字数をTextBoxの幅に制限しますか?どうして?

EDIT2:

あなたはGraphics.MeasureStringを使って、文字列の長さを測定することができます。ここで何をしたいん拡張メソッドがあります:あなたのTexBoxが複数行であり、あなたはまた、高さを取りたい場合は

myTextBox.MaxLength = myTextBox.VisibleCharCount(); 

がEDIT3:

public static class TextBoxExtension 
{ 
    public static int VisibleCharCount(this textBox textBox) 
    { 
     int count = 0; 

     do { 
      count++; 
      var testString = new string('X', count); 
      var stringWidth = System.Drawing.Graphics.MeasureString(testString, textBox.Font);     
     } while (stringWidth < textBox.Width); 

     if (stringWidth == textBox.Width) 
      return count; 
     else 
      return count-1; 
    } 
} 

はこのようにそれを使用しますあなたはSizeを取るMeasureStringのオーバーロードを使用することができます。私はそれに応じて私の例を変更するためにそれを残す。

+0

テキストボックスを描画することができますreport.userのテンプレートであるフォーム、WPFない – Arcturus

+0

です。印刷の問題を回避することを制限しています。 – doull

+0

@Arcturus:リンクを修正しました。このプロパティは、WPF TextBoxにも存在します。 – VVS

0

MaxLengthプロパティはTextBoxで使用してください。初期化後は非常に静的である可能性があります。

OR

あなたはPreviewTextInputイベントでテキスト入力を取り消すことができます。

textbox.PreviewTextInput += textbox_PreviewTextInput; 

void textbox_PreviewTextInput(object sender, TextCompositionEventArgs e) 
{ 
    TextBox box = (TextBox) sender; 
    e.Handled = box.Text.Length > 5; 
} 
+0

これは私が望む答えではありません。 – doull

+0

MaxLenthを幅と高さでどのように計算できますか? – doull

+0

問題は、別のフォントを使用することができず、すべてが異なることです。別のOSを使用すると、状況が変わることさえあります。あなたの最高の推測は推定値を使用することです。 (それぞれの文字が20 pixなので、(width * height)/ 20 = MaxLetters)。とにかくテキストを制限したいのはなぜですか? – Arcturus

関連する問題