2

私の Winform 4.5 アプリではDataGridView、リンク列として最初の列があります。選択したリンクセルのリンク色を白にしたいと思います。デフォルトでは、選択された行 (またはセル) の背景色は青で、ForeColorすべてのリンクも青であるため、ユーザーが行 (またはリンク セル) を選択すると、リンクのテキストは判読できません。以下のコードを書いてみましたが、選択したリンクセルのリンク色が全く変わりません。

private void dataGridView1_SelectionChanged(object sender, EventArgs e)
{
    foreach (DataGridViewLinkCell cell in ((DataGridView)sender).SelectedCells)
    {
        if (cell.ColumnIndex == 0)
        {
            if (cell.Selected)
            {
                cell.Style = new DataGridViewCellStyle()
                {
                    SelectionForeColor = SystemColors.HighlightText
                };
            }
        }
    }
}

次に、上記のコードを次のように変更しました。ただし、すべてのリンクのリンクの色が白に変更されます。これらのリンクの背景色も白であるため、選択されていないリンク セルは読み取れなくなります。

private void dataGridView1_SelectionChanged(object sender, EventArgs e)
    {
        foreach (DataGridViewLinkCell cell in ((DataGridView)sender).SelectedCells)
        {
            if (cell.ColumnIndex == 0)
            {
                if (cell.Selected)
                {
                    cell.LinkColor = SystemColors.HighlightText;
                }
            }
        }
    }

foreach ループ内にブレークポイントを設定し、リンク セルを選択して、両方のコードをテストしました。コードが foreach ループの反復を 1 回だけ正しく実行していることに気付きました。さらに、私はのデフォルト設定に変更を加えていませんDataGridViewLinkColumn

編集 デフォルトではDataGridView、行選択で次のように表示されます。2 番目の列のセルはForeColor白に変わりますが、最初の列のセルは変わりません。 ここに画像の説明を入力


行選択で次のようにしたい: ここに画像の説明を入力

4

2 に答える 2

1

編集CellLeaveイベントは、セルから移動しようとすると常に発生します

    private void dataGridView1_SelectionChanged(object sender, EventArgs e)
    {
        foreach (DataGridViewLinkCell cell in 
            ((DataGridView) sender).SelectedCells.OfType<DataGridViewLinkCell>())
        {
            if (cell.Selected)
            {
                cell.LinkColor = SystemColors.HighlightText;
            }
        }

    }

    private void dataGridView1_CellLeave(object sender, DataGridViewCellEventArgs e)
    {
        foreach (DataGridViewLinkCell cell in
            ((DataGridView) sender).Rows[e.RowIndex].Cells.OfType<DataGridViewLinkCell>())
        {
            cell.LinkColor = cell.LinkVisited ? Color.Purple : Color.Blue;
        }
    }

結果

于 2014-09-01T05:55:39.787 に答える
-1

私は同じ問題を経験しており、CellFormattingイベントを使用して機能させました。以下に、これに対する一般的な解決策を示します。

void grd_CellFormatting(object sender, DataGridViewCellFormattingEventArgs e)
{
    SetGridLinkColor(sender as DataGridView, e.RowIndex, e.ColumnIndex, Color.White);
}

public static void SetGridLinkColor(DataGridView grd, int rowIndex, int columnIndex, Color selectedColor)
{
  if (grd == null || !(grd.Columns[columnIndex] is DataGridViewLinkColumn))
    return;

  if (grd.Rows[rowIndex].Selected)
  {
    ((DataGridViewLinkCell)grd.Rows[rowIndex].Cells[columnIndex]).LinkColor = selectedColor;
    ((DataGridViewLinkColumn)grd.Columns[columnIndex]).VisitedLinkColor = selectedColor;
  }
  else
  {
    Color color = ((DataGridViewLinkColumn)grd.Columns[columnIndex]).LinkColor;
    ((DataGridViewLinkCell)grd.Rows[rowIndex].Cells[columnIndex]).LinkColor = color;
    ((DataGridViewLinkColumn)grd.Columns[columnIndex]).VisitedLinkColor = color;
  }
}
于 2018-10-25T07:45:50.963 に答える