2

내 Winform 4.5 앱에서 첫 번째 열이 링크 열로 DataGridView입니다. 선택한 링크 셀의 링크 색을 흰색으로하고 싶습니다. 기본적으로 선택된 행 (또는 셀)의 배경색은 파란색이고 모든 링크의 ForeColor도 파란색이므로 사용자가 행 (또는 링크 셀)을 선택하면 링크의 텍스트를 읽을 수 없습니다. 다음 코드를 작성하려고했지만 선택한 링크 셀의 링크 색상이 전혀 변경되지 않습니다.DataGridView의 DataGridViewLinkColumn에서 SelectionForeColor가 작동하지 않습니다.

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 루프의 반복을 정확히 통과한다는 것을 알았습니다. 또한, 나는 DataGridView가 행 선택에 다음과 같습니다 기본적으로 DataGridViewLinkColumn

편집 의 기본 설정으로 변화를 만들어 없다. enter image description here

답변

1

: enter image description here


내가 행 선택에이 같은 모습에 원하는 : 두 번째 열에서 셀은 흰색에 ForeColor하지만 첫 번째 열의 셀을 변경하는 것을 알 편집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; 
     } 
    } 

Result

+0

더 명확한 설명을 위해 마지막에 내 "편집"을 참조하십시오. – nam

+0

@nam 내 ** 수정 **을 참조하십시오. –

+0

도움을 주셔서 감사합니다. 여전히 작동하지 않습니다. 행 (또는 주먹 열의 셀)을 선택하면 위의 원래 게시물의 그림 1과 동일한 결과가 표시됩니다. 나는 놀랐다 - 마이크로 소프트는 링크 열 (또는 그 열에있는 셀)의 링크 열의 이상한 기본 색칠 표기 형식을 알아 차림에 틀림 없다. – nam