Селектор строки С#?

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

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

Конечно, мне не просто нужен код для этого, мне нужно научиться это делать; но есть ли хорошие ресурсы, которые могли бы помочь мне создать этот новый элемент управления? Особенно нужна будет вертикальная полоса прокрутки (текст может состоять из сотен строк).

Спасибо


person Ben    schedule 10.05.2012    source источник


Ответы (3)


Вместо того, чтобы создавать собственный настраиваемый элемент управления, почему бы просто не использовать список для хранения всей информации, которую может захотеть выбрать ваше потенциальное использование. Все функции, которые вы ищете, уже встроены в элемент управления. Если я что-то упустил, пожалуйста, объясните подробнее.

person hav2play21    schedule 10.05.2012
comment
Определенно вариант, моя цель - замаскировать его под текстовое поле или просто сделать его менее похожим на список; возможно, переопределить onpaint, но я не уверен, как это сделать. - person Ben; 11.05.2012

Вы можете (теоретически) повторно использовать любой из элементов управления * TextBox, разделив SelectionStart (позиция каретки), что даст вам индекс первого CRLF (LastIndexOf в первой подстроке) и выберите всю строку, установив длину выбора до следующего (IndexOf во второй подстроке). Но, как упоминалось ранее, стандартный ListBox — это то, что нужно.

person Ilya Kozhevnikov    schedule 10.05.2012

Является ли это статической текстовой областью или она основана на каком-то пользовательском вводе или операции копирования/вставки? Я спрашиваю, потому что вы можете столкнуться с некоторыми потенциальными проблемами с переносом, и вам все равно придется иметь дело с ‹ IE8, неправильно обрабатывающим SelectionStart.

Хотя это и не совсем элегантно, вы можете разделить текст на основе разрывов строк и использовать серию тегов span/div для содержимого или (вздрогните) таблицу, в которой у вас есть возможность захватывать ближайшие элементы DOM с помощью jQuery для получения определенных смещений строк. . Я не думаю, что текстовая область будет лучшим подходом для того, что вы хотите сделать, поскольку она действительно не оптимальна для такого выбора уровня блока.

person BrianM    schedule 10.05.2012