英文:
C# delete first numbers and spaces, renumber ListBox
问题
在图片中可以看到,我想要移除编号。有时这些编号是特殊的,你可以看到编号后面有几个空格。在1-9之间通常有3个空格,但有时会有4个。在10-99之间有2个或有时3个。我该如何移除它们并创建新的编号?谢谢。
我尝试过:
private void button43_Click(object sender, EventArgs e)
{
var empty = " ";
for (int i = 0; i < listBox1.Items.Count; i++)
{
if (listBox1.Items[i].ToString().Contains(empty))
{
listBox1.SetSelected(i, true);
var newString = listBox1.SelectedItem.ToString();
newString = newString.Substring(4);
listBox1.Items.Insert(listBox1.SelectedIndex, newString);
listBox1.Items.RemoveAt(listBox1.SelectedIndex);
listBox1.ClearSelected();
}
}
}
英文:
As you can see in the picture, I want to remove the numbering. This is sometimes special and you can see that there are a few spaces after the number. Between 1-9 there are usually 3, but sometimes 4. Between 10-99 there are 2 or sometimes 3. How can I remove them and make a new numbering? Thanks.
I tried:
private void button43_Click(object sender, EventArgs e)
{
var empty = " ";
for (int i = 0; i < listBox1.Items.Count; i++)
{
if (listBox1.Items[i].ToString().Contains(empty))
{
listBox1.SetSelected(i, true);
var new = listBox1.SelectedItem.ToString();
new = new.Substring(4);
listBox1.Items.Insert(listBox1.SelectedIndex, new);
listBox1.Items.RemoveAt(listBox1.SelectedIndex);
listBox1.ClearSelected();
}
}
}
答案1
得分: 1
你的逻辑有误,因为你正在插入数据,从而将所有内容上移。你需要要么交换删除和插入的顺序,要么在 RemoveAt
上添加1。
更好的方法是就地修改它。
而且你不需要选择任何内容。
if (listBox1.Items[i].ToString().Contains(empty))
{
listBox1.Items[i] = listBox1.Items[i].ToString().Substring(4);
}
英文:
Your logic is wrong, because you are inserting data, and therefore moving everything up. You would need to either flip the remove and insert, or add 1 to the RemoveAt
.
Even better, just modify it in place.
And you don't need to select anything.
if (listBox1.Items[i].ToString().Contains(empty))
{
listBox1.Items[i] = listBox1.Items[i].ToString().Substring(4);
}
答案2
得分: -1
以下是您要翻译的代码部分:
您可以使用 String.TrimStart(char[])。 TrimStart(char[]) 从字符串开头删除所有提到的字符,直到第一个未提到的字符。
if (listBox1.Items[i].ToString().Contains(empty))
{
listBox1.SetSelected(i, true);
var new = listBox1.SelectedItem.ToString();
// 假设 i 是新的数字。
new = i.ToString() + " " + new.TrimStart(' ', '1', '2', '3', '4', '5', '6', '7', '8', '9', '0');
listBox1.Items.Insert(listBox1.SelectedIndex, new);
listBox1.Items.RemoveAt(listBox1.SelectedIndex);
listBox1.ClearSelected();
}
来源:
https://learn.microsoft.com/en-us/dotnet/api/system.string.trimstart?view=net-7.0
我还建议不要将 "new" 用作任何东西的名称。
英文:
You could use the String.TrimStart(char[]). TrimStart(char[]) removes all mentioned chars from the start of a string until the first char which isn't mentioned.
if (listBox1.Items[i].ToString().Contains(empty))
{
listBox1.SetSelected(i, true);
var new = listBox1.SelectedItem.ToString();
// Assuming i is the new number.
new =i.ToString() + " " + new.TrimStart(' ', '1', '2', '3', '4', '5', '6', '7', '8', '9', '0');
listBox1.Items.Insert(listBox1.SelectedIndex, new);
listBox1.Items.RemoveAt(listBox1.SelectedIndex);
listBox1.ClearSelected();
}
Source:
https://learn.microsoft.com/en-us/dotnet/api/system.string.trimstart?view=net-7.0
I also recommend not to use the "new" as a name for anything.
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。
评论