8
votes

Comment limiter le nombre de caractères à coller dans la zone de texte?

Je dois limiter le nombre de caractères à coller dans une zone de texte multiligne.

Disons que ceci est ma chaîne à coller dans la zone de texte:

Bon jour Mesdames et Gents! de
je veux juste savoir

Si cela est possible, veuillez vous aider.

La règle est de 10 caractères maximum par ligne est de 10, les lignes maximales sont 2. Appliquer la règle, le texte collé ne devrait être que celui-ci:

Bon jour L de
Je viens de wan


2 commentaires

Voulez-vous permettre à l'utilisateur d'utiliser des touches courtes ctrl + v ?


Oui, toute forme de pâte (Ctrl + V, clic droit + coller, Maj + insert) est autorisée.


5 Réponses :


1
votes

Vous pouvez y parvenir de la manière suivante. Ensemble Longueur maximale code> de la zone de texte comme 22 xxx pré>

dans l'événement de changement de texte effectuez les éléments suivants P>

private void textBox1_TextChanged(object sender, EventArgs e)
{
     if (textBox1.Text.Length == 10)
     {
           textBox1.AppendText("\r\n");
     }
}


2 commentaires

Merci pour vos commentaires, mais vous voyez, j'ai déjà une restriction à ce sujet (lorsque l'utilisateur tente d'entrer normalement comme non pas collé). Mon problème est maintenant comment capturer la pâte ...


@Nitesh - Votre solution ne fonctionne pas dans le cas du colle, car lors du colonage de la longueur du texte passe de 0 immédiatement à la taille du texte informatique collé. Ce n'est jamais exactement 10, l'ajout de la nouvelle ligne ne se produit jamais. Cela ne fonctionne pas non plus que si l'utilisateur est en 2 caractères, hits entrez, puis Types 2 caractères et hits entrez.



6
votes

Il n'y a pas automatique quoi faire cela. Vous devrez gérer l'événement textchanged code> sur la zone de texte et analyser manuellement le texte modifié pour la limiter au format requis.

private const int MaxCharsPerRow = 10;
private const int MaxLines = 2;

private void textBox1_TextChanged(object sender, EventArgs e) {
    string[] lines = textBox1.Lines;
    var newLines = new List<string>();
    for (int i = 0; i < lines.Length && i < MaxLines; i++) {
        newLines.Add(lines[i].Substring(0, Math.Min(lines[i].Length, MaxCharsPerRow)));
    }
    textBox1.Lines = newLines.ToArray();
}


0 commentaires

3
votes

Vous pouvez attraper le message wm_paste (envoyé à votre textbox ) pour traiter vous-même: xxx


2 commentaires

Merci pour cela mais changer le contrôle (ou la zone de texte) sera une grande douleur pour moi ...


@Jackfrost pas vraiment. Il suffit d'ajouter une classe distincte dans votre projet. Vous pouvez réutiliser cette classe. C'est la solution la plus propre.



0
votes

Pourquoi ne travaillez-vous pas sur les données du presse-papiers pour y parvenir. Ci-dessous est un petit exemple. XXX

Collez maintenant les données que vous aimez, les données doivent être coupées à la longueur maximale autorisée par votre programme.


0 commentaires

-2
votes
    private void textBox1_TextChanged(object sender, EventArgs e)
    {
        if (textBox1.Text.Length == 10)
        {
            textBox1.MaxLength = 10;
            //MessageBox.Show("maksimal 10 karakter");
        }
    }

1 commentaires

Comment cela aide-t-il mieux que les autres solutions déjà données?