Свойство MaxLength в C # Texbox - ошибки (Winform) - PullRequest
1 голос
/ 21 июня 2011

Может быть какой-то обходной путь для этого - однако, я не уверен, что это в данный момент.После установки свойства MaxLength текстового поля я не могу вручную превысить MaxLength textBox.С другой стороны, если бы я должен был создать цикл, который программно добавляет символы в текстовое поле - этот цикл мог бы превышать свойство maxLength.эти данные, есть ли способ убедиться, что свойство maxlength не превышено?

С уважением, Эван

Ответы [ 8 ]

6 голосов
/ 21 июня 2011

MaxLength: получает или задает максимальное количество символов, которое пользователь может ввести или вставить в элемент управления текстового поля.(Формы) http://msdn.microsoft.com/en-us/library/system.windows.forms.textboxbase.maxlength.aspx и Получает или задает максимальное количество символов, допустимое в текстовом поле.(Интернет) http://msdn.microsoft.com/en-us/library/system.web.ui.webcontrols.textbox.maxlength.aspx

Другими словами, в этом и заключается смысл MaxLength - все дело в управлении пользовательским вводом.Поскольку у вас есть текстовое поле для начала, вам не нужно устанавливать собственные жесткие программные ограничения.

Короче говоря, нет - вы не можете изменить это поведение, не перекрывая некоторые другие функции - напримерOnChanged - или добавление условных тестов, подобных показанным Беном и Сресом.

3 голосов
/ 21 июня 2011

Из MSDN документы :

В коде вы можете установить значение свойства Text на значение, длина которого больше значения, указанного в MaxLength.имущество.Это свойство влияет только на текст, введенный в элемент управления во время выполнения.

Если вы хотите, чтобы Text не превышал MaxLength, необходим дополнительный код .

2 голосов
/ 21 июня 2011
textBox1.MaxLength = 5;

while(textBox1.Text.Length <= textBox1.MaxLength)
    textBox1.AppendText ("D");

Это должно сделать это, я верю

2 голосов
/ 21 июня 2011

Как насчет:

textBox1.MaxLength = 5; 

for (int i = 0; i < 20 && i < textBox1.MaxLength; i++)
{
    textBox1.AppendText("D");
}

Не уверен, считается ли это "большим количеством строк кода", но это довольно простая дополнительная проверка.

1 голос
/ 21 июня 2011
Свойство

MaxLength не позволяет пользователю вводить более n символов. но когда вы устанавливаете свойство Text программно, текстовое поле будет показывать значение его свойства Text, даже если его длина превышает значение MaxLength

, поэтому вы должны проверить, превышает ли ваша петля максимальную длину или нет.

0 голосов
/ 21 июня 2011

Вы можете написать метод расширения и использовать его для добавления текста вместо .AppendText ()

void Main()
{
    var t = new TextBox();
    t.MaxLength=5;
    t.Text = "123";
    t.AppendTextRespectMaxLength("456789");
    t.Text.Dump(); // prints 12345
}

public static class ExtensionMethods
{
    public static void AppendTextRespectMaxLength(this TextBox textbox,string newText)
    {
        if(textbox.Text.Length + newText.Length <= textbox.MaxLength)
        {
            textbox.Text += newText;
        }
        else
        {
            var remaining = textbox.MaxLength - textbox.Text.Length;
            var subPortion = newText.Substring(0,remaining);
            textbox.Text += subPortion;
        }
    }
}
0 голосов
/ 21 июня 2011

MaxLength используется, когда вы не хотите, чтобы пользователь мог вводить больше, чем назначенное количествоОднако, программно, это может быть переопределено.Вот что делает добавляемый текст:

public void AppendText(string text)
{
    if (text.Length > 0)
    {
        int start;
        int length;
        this.GetSelectionStartAndLength(out start, out length);
        try
        {
            int endPosition = this.GetEndPosition();
            this.SelectInternal(endPosition, endPosition, endPosition);
            this.SelectedText = text;
        }
        finally
        {
            if (base.Width == 0 || base.Height == 0)
            {
                this.Select(start, length);
            }
        }
    }
}
0 голосов
/ 21 июня 2011

Насколько мне известно, установка максимальной ширины текстового поля только навязывает это ограничение конечному пользователю, который вводит значения в полном пользовательском интерфейсе.Это ограничение не распространяется на код

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...