0

我想将选定的行从我的数据网格视图复制到剪贴板它工作完美,只有一件事:我没有成功从字符串中删除最后 3 个空格。(我也尝试过:clipboard.Remove(clipboard.Length - 3)clipboard.Trim(),但两者都不起作用)

我的功能:

private void menuCopyClipboard_wholeRow_Click(object sender, EventArgs e)
{
    #region calculate spaces
    int[] spaces = new int[8]; // I have 8 columns in the data grid view
    for (int i = 0; i < 8; i++)
        spaces[i] = 0;


    foreach (DataGridViewRow dgvr in datagridview1.SelectedRows)
        foreach (DataGridViewColumn dgvc in datagridview1.Columns)
        {
            int cellLength = datagridview1.Rows[dgvr.Index].Cells[dgvc.Index].FormattedValue.ToString().Length;
            if (spaces[dgvc.Index] < cellLength)
               spaces[dgvc.Index] = cellLength;
        }
    #endregion

    string clipboard = "";
    foreach (DataGridViewRow dgvr in datagridview1.SelectedRows)
    {
        foreach (DataGridViewColumn dgvc in datagridview1.Columns)
                clipboard += String.Format("{0, -" + spaces[dgvc.Index] + "}   ", // 3 spaces between columns
                                           datagridview1.Rows[dgvr.Index].Cells[dgvc.Index].FormattedValue.ToString());

        if (dgvr.Index != 0 && datagridview1.SelectedRows.Count > 1) clipboard += "\n"; // to not add enter after last line nor copy one line
    }

    clipboard.TrimEnd(); // <-- doens't erase spaces
    Clipboard.SetText(clipboard);
}

问题:空格没有被删除,如下图所示:

在此处输入图像描述

(问题:怎么了?为什么没有删除空格?)

4

4 回答 4

2

字符串是不可变的。

也就是说,像 TrimEnd() 这样的字符串操作方法将始终返回一个新字符串。

所以这样做:

clipboard = clipboard.Trim();

只会解决你的问题。

如果你还需要删除\n你可以使用这个:

char[] trimChars = new char[]{' ','\n'};
clipboard = clipboard.TrimEnd(trimChars);
于 2013-09-12T11:11:29.723 回答
1

在这一行

if (dgvr.Index != 0 && datagridview1.SelectedRows.Count > 1) clipboard += "\n"; // to not add enter after last line nor copy one line

您在字符串的末尾添加了一个“\n”,这会阻止 Trim 在添加“\n”之前尝试修剪。

if (dgvr.Index != 0 && datagridview1.SelectedRows.Count > 1) clipboard = clipboard.Trim() + "\n"; // to not add enter after last line nor copy one line
else clipboard = clipboard.Trim();
于 2013-09-12T11:14:41.153 回答
1

TrimEnd() 从当前 String 对象中删除数组中指定的一组字符的所有尾随出现,并返回结果字符串,因此您应该收到转换后的字符串。

char[] charsToTrim = {' '};
clipboard = clipboard.TrimEnd(charsToTrim);
于 2013-09-12T11:08:28.723 回答
0

用这个

clipboard.Trim(); 

代替 :

clipboard.TrimEnd(); 
于 2013-09-12T11:12:13.170 回答