0

選択した行をデータ グリッド ビューからクリップボードにコピーしたいのですが、完璧に機能します。文字列から最後の 3 つのスペースを削除できません。(私も試してみます: clipboard.Remove(clipboard.Length - 3)and 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

TrimEnd() は、現在の String オブジェクトから、配列で指定された一連の文字の末尾の出現をすべて削除し、結果の文字列を返すため、変換された文字列を受け取る必要があります。

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

この行で

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

文字列の末尾に「\n」を追加しているため、トリムが機能しなくなります。「\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 に答える
0

これを使って

clipboard.Trim(); 

それ以外の :

clipboard.TrimEnd(); 
于 2013-09-12T11:12:13.170 に答える