«Отключение» свойства MaxLength текстового поля в C#

#c# #winforms

#c# #winforms

Вопрос:

В настоящее время я работаю над приложением Windows Forms, и мне нужно иметь текстовое поле, которое не ограничивает размер ввода Int32.MaxValue .

Проблема в том, что MaxLength это Int32 свойство TextBox , и я, конечно, не могу установить число, которое больше этого, в качестве его значения.

В идеале я вообще не хочу устанавливать какое-либо число и полностью «отключить» эту проверку.

Могу ли я каким-либо образом получить TextBox , который не ограничивает размер ввода?

Ответ №1:

Установите его равным нулю

Windows NT 4.0, Windows 2000, Windows 2000 Professional, Windows 2000 Server, Windows 2000 Advanced Server, Windows XP Home Edition, Windows XP Professional x64 Edition, платформа Windows Server 2003 Примечание: Если для свойства MaxLength установлено значение 0, максимальное количество символов, которое может ввести пользователь, равно 2147483646 или количеству, основанному на доступной памяти, в зависимости от того, что меньше.

Платформа Windows Millennium Edition Примечание: Если для свойства MaxLength установлено значение 0, максимальное количество символов, которое может ввести пользователь, равно 32 766 или количеству, основанному на доступной памяти, в зависимости от того, что меньше.

От:http://msdn.microsoft.com/en-us/library/system.windows.forms.textboxbase.maxlength.aspx


РЕДАКТИРОВАНИЕ для Windows forms

Комментарии:

1. 1 Это сработало … хотя, что-то странное происходит, когда я пытаюсь дважды вставить огромную строку в TextBox . По какой-то причине, когда я выполняю вторую вставку, текст, отображаемый в TextBox , исчезает, и он не позволит вам вводить больше символов, пока вы не нажмете CTRL A и не нажмете удалить. Но фактическое значение в TextBox все еще остается, но просто не отображается. Кто-нибудь когда-нибудь сталкивался с этим?

2. @Andreas: Насколько «огромна» эта строка?

3. @IAbstractDownvoteFactor: Обратите внимание, что ограничение 2147483646 в любом случае на единицу меньше int.MaxValue , так что на самом деле это не дает большего ограничения.

4. В качестве примера, каждая «вставка» содержала строку длиной в 34464 символы, и я вставил ее дважды.

5. @AndreasGrech: Вы знаете, что 34464 намного, намного меньше, чем int.MaxValue , верно?

Ответ №2:

Предел int.MaxValue в любом случае является недостижимым пределом. Вы не сможете создать строку почти такой длины. Другими словами, если вам действительно нужно более 231 символа, у вас возникнут проблемы посерьезнее, чем TextBox.MaxLength .

Могу ли я спросить, когда, по вашему мнению, было бы действительно удобно иметь более 2 ГБ текстового файла ASCII в одном элементе управления GUI? Если вы хотите написать полнотекстовый редактор, который может обрабатывать огромные файлы, вы, вероятно, не захотите использовать TextBox для начала…

РЕДАКТИРОВАТЬ: Я бы на самом деле сказал, что вы, вероятно, захотите установить ограничение, меньшее, чем int.MaxValue , определенное в ходе тестирования — при этом, вероятно, что другие части вашей системы выйдут из строя до того, как вы приблизитесь к этому пределу. Если хотите, выясните, каков реальный предел, но я гарантирую, что он будет ниже int.MaxValue

Комментарии:

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

2. @AndreasGrech: Пересекать границы чего? Разумность? Реально ли вы думаете, что ограничение в (скажем) 1 миллиард будет для вас проблемой? Даже это может оказаться слишком большим для .NET string .

3. Но что, если такая «большая» строка может вывести продукт из строя?

4. Строка такого размера ничего не может сделать, поскольку она вообще не может существовать.

5. @AndreasGrech: Это могло бы произойти, но это произойдет до того, как вы приблизитесь к пределу, о котором вы беспокоитесь.