The Magical Magikarp Ответов: 3

Как переопределить обычную максимальную длину для пользовательского элемента управления textbox и сделать его недоступным для редактирования? С#


Привет! Я создание пользовательского TextBox Control, где я дам ему обычай, не редактируемый Maximum Length. (2147483647 это обычай MaxLength)

В принципе, мне это нужно полностью удалить то MaxLength Property, и заменить его своим собственным MaxLength.

Я просто не знаю, как это сделать. MaxLength и замените его моим Maximum Length Property.

Что я уже пробовал:

private int length = 2147483647;

        [Browsable(true)]
        [Category("Custom Behavior")]
        [Description("The maximum length for the control. This is a read-only property.")]
        [DisplayName("Maximum Length")]

        public int MaximumLength
        {
            get { return this.length; }
        }

3 Ответов

Рейтинг:
6

phil.o

Технически, путем наследования TextBox, вы можете затенить его MaxLength недвижимость с new ключевое слово:

public class CustomTextBox : TextBox
{
   public new int MaxLength
   {
      get { /* ... */ }
   }
}
Если вы не предоставите никакого сеттера, новое свойство будет доступно только для чтения.

Но, как заявил Пол в своем решении, это ужасная идея-пытаться запихнуть столько информации в один элемент управления.


The Magical Magikarp

Мне понравились другие ответы, но ваш прекрасно отвечает на мой вопрос :) Спасибо!

Рейтинг:
2

Dave Kreskowiak

Почему ты хочешь это сделать? Существующая максимальная длина текстового поля также отражает фактическую максимальную длину строки в байтах. Вы не можете сделать свойство MaxLength больше и заставить его работать. Вы не можете создать строку больше, чем Int32.MaxValue байт или символов в длину. Так в чем же смысл?


Рейтинг:
1

OriginalGriff

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

Но это не очень хорошая идея, даже если бы вы могли (или вы идете на все усилия, связанные с "прокаткой своего собственного" текстового поля).
Подумайте об этом: 2 147 483 647 символов-это около 27 000 000 строк текста. Неужели вы всерьез намерены шлепнуть столько текста перед Пользователем и сказать: "правильно - вы продолжаете"? Система, вероятно, замедлится до обхода - при условии, что она не остановится полностью, - и у вашего пользователя не будет хорошего способа даже прочитать ее. Я могу получить около 110 строк текста на моем экране при удобном размере чтения, так что вы смотрите примерно на 250 000 строк текста. страницы текста в одном элементе управления, предполагая, что он заполняет экран. Как вы думаете, насколько большой будет вкладка полосы прокрутки? сколько времени потребуется пользователю, чтобы пробраться через эту кучу в поисках одной страницы или, что еще хуже, одной строки, которую он ищет?

Это глупая идея: ваши пользователи будут ненавидеть его, а также ваше приложение и вас. Сядьте и переосмыслите весь свой пользовательский интерфейс с точки зрения пользователя, а не "легко для меня кодировать" - в настоящее время он полностью сломан.


The Magical Magikarp

Ну, у меня есть опция "Найти" и "заменить", которая позволит им найти нужный текст и заменить его.. Это также позволяет им перемещаться к выбранной линии. (Который организован компанией страницы) Итак, ответ таков: - Нет?

johannesnestler

Так что реализуйте именно это. Сохраняйте "строку" - это должен быть файл. Покажите пользователю результаты поиска из файла, позвольте им заменить/перейти (возможно, получите вдохновение от функции Notepad++ "поиск и замена в нескольких файлах"). Сделайте элемент управления, чтобы показать измененные линии (что угодно). Но не загружайте весь текст в элемент управления. Только подумайте о потреблении памяти (и обо всем, что упоминал OriginalGriff). Действительно переосмыслите то, что вы хотите сделать, функция не может быть "я покажу вам сейчас миллион строк текста).
Я сделал Trace-Viewer назад, чем (полный уровень детализации приложения (backend/frontend) генерировал около 400 тысяч строк трассировки за один клик), который работал так. Но ни на секунду я не подумал: Ах, я просто загружаю все это....

The Magical Magikarp

Кроме того, не могли бы вы указать мне правильное направление для создания моего собственного совершенно нового TextBox от А UserControl- Спасибо :)