3

我有一个需要一些字符串的文本框。这个字符串可能很长。我想限制显示的文本(例如 10 个字符)并附加 3 个点,例如:

如果文本框取值“To be, or not to be,这就是问题:”它只显示“To be, or ...”

或者

如果文本框取值“To be”,则显示“To be”

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

7 回答 7

4

您应该使用标签控件来显示数据。设置AutoSize为假和AutoEllipsis真。TextBox没有此功能的原因有很多,其中包括:

  • 你要在哪里存储截断的数据?
  • 如果用户选择要编辑甚至复制的文本,您如何处理?

如果您反驳说 TextBox 是只读的,那么这只是重新考虑您为此使用的控件的更多理由。

于 2013-05-15T10:58:20.560 回答
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);
于 2013-05-15T10:49:31.837 回答
2

如果您需要使用正则表达式,您可以这样做:

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

这会将第十个字符之后的任何文本替换为三个点。

(?<=expr)是一个回顾。这意味着expr必须匹配(但不消耗)才能使其余的匹配成功。如果输入中的字符少于十个,则不执行替换。

这是关于 ideone 的演示

于 2013-05-15T11:21:48.987 回答
1

像这样的东西?

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

展示您尝试过的内容以及您遇到的问题。

于 2013-05-15T10:48:28.733 回答
1
string textToDisplay = (inputText.Length <= 10) 
          ? inputText
          : inputText.Substring(0, 10) + "...";
于 2013-05-15T10:49:18.567 回答
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;
于 2013-05-15T10:49:35.353 回答
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 ..."
于 2013-05-15T10:49:54.417 回答