2013-07-24 3 views
-4

Я использую текстовое поле и вот моя проблема ...текст длиной более максимально допустимый текст

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

private void txtText_KeyPress(object sender, KeyPressEventArgs e) 
{ 
    if (txtText.Text.Length > MaxLengthAllowed - 1 && e.KeyChar != 8) 
    { 
     e.Handled = true; 
     Console.Beep(2000, 90); 
     return; 
    } 
} 

Теперь моя проблема, когда я нажать и удерживать клавишу (например, буква А), оно превышает «MaxLengthAllowed», а затем подает звуковой сигнал.

Это ошибка или что-то вроде ограничения текстового поля? Или я чего-то не хватает?

Этот код работает нормально, если вы не держите ключ. Следовательно, это моя проблема.

+0

Вы делаете звуковой сигнал справа 'Console.Beep (2000, 90);'? –

+1

вы говорите ему в звуковой сигнал * ПОСЛЕ * он превышает. – James

+0

@Sriram Sakthivel - Да, я делаю ему звуковой сигнал, когда он достигает максимального текста. –

ответ

1

Просто установите свойство MaxLength текстового поля. Это так же просто, как

textboxVar.MaxLength = maxLengthAllowed; 

Надеюсь, что это поможет.

Вы всегда можете подписаться на событие PropertyChanged, которое вы можете выполнить при срабатывании всякий раз, когда изменяется свойство Text текстового поля. Почитайте как raise an event on Property Change

+0

Спасибо за это, но я активно использую многострочный текстовый ящик, и я не могу этого сделать. Я просто задал этот вопрос, чтобы сделать его проще.вот мой оригинальный почтовый путь назад: http://stackoverflow.com/questions/17079046/is-there-a-way-to-catch-maximum-length-perline-and-not-allow-user-to-input -more –

+0

@JackFrost после прочтения вашего оригинального сообщения я могу сказать, что ваш этот вопрос передает совершенно другое значение. – Ehsan

+0

Вы могли бы сказать это. Вот почему я сделал новый пост. Coz здесь, моя проблема: длина текста превышает MaxLengthAllowed, когда пользователь HOLDS имеет ключ ... –

0

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

+0

Вы говорите: «Это срабатывает только один раз, когда вы отпускаете ключ», но мой код может ALMOST обрабатывать его? например MaxLengthAllowed = 15; теперь, если я держу ключ, как в моем посте, длина текста превышает 17, а иногда 19 ТОЛЬКО и не до бесконечности. –

+0

Насколько я вижу, ваш код будет работать бесконечно, пока вы не отпустите ключ. Он будет продолжать звучать до тех пор, пока длина текста будет равна или больше максимальной допустимой длины. – FreddieH

0

TextBox.Text не обновляется, когда TextBox.KeyPress уволен. Например, если Text до KeyPress равен A, то когда пользователь вводит B, Text по-прежнему A (не AB) в обработчике событий KeyPress. Таким образом, вы должны определить свой MaxLengthAllowed на 1 меньше желаемого значения. Код должен выглядеть следующим образом:

private void txtText_KeyPress(object sender, KeyPressEventArgs e) 
{ 
    if ((txtText.Text.Length > MaxLengthAllowed - 1) && e.KeyChar != 8) 
    { 
    e.Handled = true; 
    Console.Beep(2000, 90);  
    } 
} 

Я думаю, вы должны использовать TextBox.MaxLength свойство вместо этого, он также поддерживает Beep, то Beep sound даже лучше, чем Beep генерируемой Console.Beep().

+0

Спасибо за это, но поскольку я просмотрел свой код, у меня уже есть «MaxLengthAllowed - 1» –

+0

@JackFrost, если да, я не могу воспроизвести вашу проблему, он НЕ МОЖЕТ превышать желаемую максимальную длину. –

+0

Вот что я подумал ... Попробуйте сделать мой код в конце, тогда вы увидите. хахаха. kinda разочарование, хотя .. :( –

Смежные вопросы