我想在列表框中创建换行符,以便文本不会一直拖动到用户无法读取文本的整个内容。
我想要这样的话,当文本到达列表框的末尾时,它会下到下一行,简单来说就是自动换行。我已经上网搜索并发现使用listbox实现自动换行功能是不可能的。我设法在网上找到了一个Word Wrap算法,并决定使用它,但是我不确定如何将它实现到我希望它进入的列表框中。
以下是我找到的代码:
// https://www.codeproject.com/Articles/51488/Implementing-Word-Wrap-in-C
public static string WordWrap(string text, int width)
{
int pos, next;
StringBuilder sb = new StringBuilder();
// Lucidity check
if (width < 1)
return text;
// Parse each line of text
for (pos = 0; pos < text.Length; pos = next)
{
// Find end of line
int eol = text.IndexOf(Environment.NewLine, pos);
if (eol == -1)
next = eol = text.Length;
else
next = eol + Environment.NewLine.Length;
// Copy this line of text, breaking into smaller lines as needed
if (eol > pos)
{
do
{
int len = eol - pos;
if (len > width)
len = BreakLine(text, pos, width);
sb.Append(text, pos, len);
sb.Append(Environment.NewLine);
// Trim whitespace following break
pos += len;
while (pos < eol && Char.IsWhiteSpace(text[pos]))
pos++;
} while (eol > pos);
}
else sb.Append(Environment.NewLine); // Empty line
}
return sb.ToString();
}
/// <summary>
/// Locates position to break the given line so as to avoid
/// breaking words.
/// </summary>
/// <param name="text">String that contains line of text</param>
/// <param name="pos">Index where line of text starts</param>
/// <param name="max">Maximum line length</param>
/// <returns>The modified line length</returns>
private static int BreakLine(string text, int pos, int max)
{
// Find last whitespace in line
int i = max;
while (i >= 0 && !Char.IsWhiteSpace(text[pos + i]))
i--;
// If no whitespace found, break at maximum length
if (i < 0)
return max;
// Find start of whitespace
while (i >= 0 && Char.IsWhiteSpace(text[pos + i]))
i--;
// Return length of text before whitespace
return i + 1;
}
目前我把它作为一个方法,我应该把这个方法直接放在listbox方法本身吗?
如果是,我如何修改上述代码才能使其正常工作? 顺便说一句,descLb是我的列表框的名称
请不要建议我将我的列表框更改为另一种形式(例如文本框),我只知道如何从数据库中提取文本以输入到列表框中并为我保持简单,我想使用列表框。
答案 0 :(得分:0)
您不需要所有复杂的服务器端C#代码来将文本包装在asp.net的列表框中。您只需要一些特殊的CSS。例如,下面的CSS将自动将文本换行到asp.net列表框中。
如果您在CSS下面提到的宽度不足以适合列表框选项的文本,则会自动进行换行。
用于在文件框中包装文字的CSS
select option {
white-space: normal;
width: 100px
}
这是aspx标记,你可以尝试在你的结尾看到文本自动被包装。
请注意,
100px
的标记宽度内
自动变形
<%@ Page Language="C#" AutoEventWireup="true" %>
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
<title>Wrtap text in ListBox</title>
<style>
select[id*='ListBox1'] option {
white-space:normal;
}
</style>
</head>
<body>
<form id="form1" runat="server">
<div>
<asp:ListBox ID="ListBox1"
Rows="6"
Width="150px"
SelectionMode="Single"
runat="server">
<asp:ListItem>Item 1 dsdds sdsdsdsd sdsd sdsd sds xyz</asp:ListItem>
<asp:ListItem>Item 2</asp:ListItem>
<asp:ListItem>Item 3 gfgf kgkgkg kgkkg abc</asp:ListItem>
<asp:ListItem>Item 4</asp:ListItem>
<asp:ListItem>Item 5</asp:ListItem>
<asp:ListItem>Item 6</asp:ListItem>
</asp:ListBox>
</div>
</form>
</body>
</html>
Bellow是通过给出上面提到的特殊CSS样式,在asp.net列表框中看起来如何。
asp.net ListBox中文本换行的屏幕截图