2010-12-02 3 views
1
<TextBox Height="?" Width="?" AcceptReturn="true" /> 

Hauteur = Aléatoire; Largeur = Aléatoire; Par exemple, la hauteur est de 60, la largeur est 100. Comment contrôler inputed lentgh du texte moins que la taille de TextBoxwpf, comment limiter MaxLength de TextBox?

Répondre

5

Utilisez MaxLength

EDIT:

Attendez, quoi? Vous souhaitez limiter le nombre de caractères à la largeur de la zone de texte? Pourquoi ça?

EDIT2:

Vous pouvez mesurer la longueur d'une chaîne en utilisant Graphics.MeasureString. Voici une méthode d'extension qui fait ce que vous voulez:

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; 
    } 
} 

utiliser comme ceci:

myTextBox.MaxLength = myTextBox.VisibleCharCount(); 

EDIT3:

Si votre TexBox est multiligne et que vous voulez aussi prendre la hauteur en compte, vous pouvez utiliser la surcharge de MeasureString qui prend une taille. Je vous laisse le soin de modifier mon exemple en conséquence.

+0

C'est des formes, et non WPF – Arcturus

+0

Il est un modèle de report.user peut attirer TextBox. Restreindre est d'éviter les problèmes d'impression. – doull

+0

@Arcturus: J'ai corrigé le lien. Cette propriété existe également pour le TextBox WPF. – VVS

0

Utilisez la propriété MaxLength sur TextBox, qui peut être assez statique une fois initialisée.

OU

Vous pouvez annuler la saisie de texte à l'événement PreviewTextInput:

textbox.PreviewTextInput += textbox_PreviewTextInput; 

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

ce n'est pas la réponse que je veux. – doull

+0

Comment peut calculer MaxLenth par la largeur et la taille? – doull

+0

Le problème est, vous ne pouvez pas .. utiliser une autre police et tout sera différent. L'utilisation d'un autre système d'exploitation peut même créer des problèmes. Votre meilleure estimation est d'utiliser des estimations. (disons que chaque lettre est 20 pix, donc (largeur * hauteur)/20 = MaxLetters). Pourquoi voulez-vous restreindre le texte de toute façon? – Arcturus