3

文字列を取るテキストボックスがあります。この文字列は非常に長くなる可能性があります。表示されるテキストを (たとえば 10 文字に) 制限し、次のように 3 つのドットを付けたい:

テキストボックスの値が「To be, or not to be, that is the question:」の場合、「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

データを表示するには、Label コントロールを使用する必要があります。AutoSizefalse とtrue に設定し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}).*", "...");

これにより、10 文字目以降のテキストが 3 つのドットに置き換えられます。

これ(?<=expr)後読みです。これはexpr、マッチの残りが成功するために、マッチする必要がある (ただし、消費されない) ことを意味します。入力が 10 文字未満の場合、置換は実行されません。

これは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 に答える