2013-05-15 2 views
3

У меня есть текстовое поле, которое занимает некоторую строку. Эта строка может быть очень длинной. Я хочу ограничить отображаемый текст (например, до 10 символов) и прикрепить к нему 3 точки:Предел символов в строке

если текстовое поле принимает значение «Быть ​​или не быть, вот в чем вопрос:« он отображает только «Быть, или ...»

или

, если текстовое поле принимает значение "Для того, чтобы быть" это отображение "быть"

  Html.DevExpress().TextBox(
        tbsettings => 
        { 
         tbsettings.Name = "tbNameEdit";; 
         tbsettings.Width = 400; 
         tbsettings.Properties.DisplayFormatString=??? 
        }).Bind(DataBinder.Eval(product, "ReportName")).GetHtml(); 
+1

Не могли бы вы попробовать? –

+1

Что вы используете? WPF или Windows Forms? –

+0

google .net textbox elipsis –

ответ

2

Если вам нужно использовать регулярное выражение, вы можете сделать это:

Regex.Replace(input, "(?<=^.{10}).*", "..."); 

Это заменяет любой текст после десятого символа с тремя точками.

(?<=expr) является lookbehind. Это означает, что expr должен соответствовать (но не потребляться), чтобы остальная часть матча была успешной. Если на входе меньше десяти символов, замена не выполняется.

Адрес demo on ideone.

+0

10x То, что я искал –

1

что-то вроде этого?

static void SetTextWithLimit(this TextBox textBox, string text, int limit) 
{ 
    if (text.Length > limit) 
    { 
     text = text.SubString(0, limit) + "..."; 
    } 
    textBox.Text = text; 
} 

Показать, что вы пробовали и где застряли.

+1

CodeCaster, 'SubString (limit) 'не должно быть' SubString (0, limit) '? Потому что, когда мы пишем 'SubString (limit)', берется после того, как все строки помещаются в позицию limit. –

+0

@ Сонер, вы правы, спасибо, исправлены. – CodeCaster

1
string textToDisplay = (inputText.Length <= 10) 
      ? inputText 
      : inputText.Substring(0, 10) + "..."; 
2

Попробуйте это:

string displayValue = !string.IsNullOrWhiteSpace(textBox.Text) && textBox.Text.Length > 10 
    ? textBox.Text.Left(10) + "..." 
    : textBox.Text; 

В метод расширения:

public static string Ellipsis(this string str, int TotalWidth, string Ellipsis = "...")  
{ 
    string output = ""; 

    if (!string.IsNullOrWhiteSpace(str) && str.Length > TotalWidth) 
    { 
     output = output.Left(TotalWidth) + Ellipsis; 
    } 

    return output; 
} 

Используя это будет:

string displayValue = textBox.Text.Ellipsis(10); 
0

Вам не нужно использовать regex

string s = "To be, or not to be, that is the question:"; 
s = s.Length > 10 ? s.Remove(10, s.Length - 10) + "..." : s; 
+0

Мне нужно. функция, переносящая данные в текстовое поле, скрыта от меня, и у меня нет доступа к ней, поэтому я не могу использовать какие-либо методы на стороне сервера –

+0

@ Йо-хо-хо, если у вас есть доступ к библиотеке 'Regex' внутри 'C#', тогда у вас есть доступ к основным методам манипуляции строками – LukeHennerley

0
string maxStringLength = 10; 
string displayStr = "A very very long string that you want to shorten"; 
if (displayStr.Length >= maxStringLength) { 
    displayStr = displayStr.Substring(0, maxStringLength) + " ..."; 
} 

//displayStr = "A very very long str ..." 
4

Вы должны использовать контроль этикетки для отображения данных. Установите AutoSize на false и AutoEllipsis на true. Есть веские причины, почему TextBox делает не имеют такую ​​функциональность, среди которых:

  • , где вы собираетесь хранить усеченные данные?
  • если пользователь выбирает текст для редактирования или даже копирования, как вы справляетесь с этим?

Если вы контр-аргумент состоит в том, что TextBox доступен только для чтения, то это всего лишь причина переосмыслить элемент управления, который вы используете для этого.

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

  • Нет связанных вопросов^_^