2016-02-09 47 views
1

是否有某種方式可以使DataGridView的當前單元始終具有當您按下Tab按鈕時得到的虛線邊框?我注意到,如果在此之後按了一次Tab按鈕,當前單元總是有邊框,但我想從一開始就有邊框,而不必按Tab按鈕。如何在不按Tab鍵的情況下強制DataGridView當前單元輪廓

目前我編程發送Tab鍵,如下圖所示:

SendKeys.Send("{TAB}"); 

但是,這是缺憾,我寧願有一個妥善的解決辦法,如果一個是可用的。

編輯: 我忘了提及的是,SelectionMode設置爲FullRowSelect,我並不想改變這一點。我想要當前單元格周圍的邊框輪廓以及整個行被突出顯示。

+0

您是否嘗試設置'CurrentCell'屬性? – Bioukh

+0

設置'CurrentCell'不會像按Tab一樣給我單元格周圍的邊框。 – JPProgrammer

回答

2

創建一個新的類從DataGridView繼承和覆蓋ShowFocusCues屬性 - 返回True總是顯示焦點矩形或False從未表現出來。如果你想隨時改變它,你甚至可以添加一個公共屬性來公開它。

public class DataGridViewFocused : DataGridView 
{ 
    public bool ShowFocus { get; set; } 

    protected override bool ShowFocusCues 
    { 
     get 
     { 
      return this.ShowFocus; 
     } 
    } 
} 

DataGridViewFocused dataGridView1 = new DataGridViewFocused(); 
dataGridView1.ShowFocus = true; 

注:這將只專注於CurrentCell,因爲這是它只是如何表現。因此,即使設置了FullRowSelect,突出顯示的行中只有一個選定單元格將被聚焦。

+0

正是我在找什麼,謝謝! – JPProgrammer

1

此行爲似乎是在Windows窗體中硬編碼。我認爲你不能找到一個更好的編碼方式。

我建議你的一個建議是處理DataGridView.CellPainting事件並手動繪製邊框。然後,您可以使用所需的樣式繪製邊框,以便用戶比「TAB」方法更容易看到當前單元格。這是一個帶紅的例子虛線邊框:

private void dataGridView1_CellPainting(object sender, DataGridViewCellPaintingEventArgs e) 
{ 
    if (dataGridView1.CurrentCell != null && e.RowIndex != -1 && e.ColumnIndex != -1 && 
     dataGridView1.CurrentCell.RowIndex == e.RowIndex && 
     dataGridView1.CurrentCell.ColumnIndex == e.ColumnIndex) 
    { 
     e.Paint(e.ClipBounds, e.PaintParts); 
     var pen = new Pen(Color.Red) { DashStyle = DashStyle.Dash }; 
     var rect = new Rectangle(e.CellBounds.Left, e.CellBounds.Top, e.CellBounds.Width - 2, e.CellBounds.Height - 2); 
     e.Graphics.DrawRectangle(pen, rect); 
     e.Handled = true; 
    } 
} 
+0

@JPProgrammer **如果**你想*所有*選中的單元格具有焦點矩形,則此方法可以進行一些修改:使用'DashStyle.Dot'作爲默認的外觀。還要將if語句更改爲if(e.RowIndex!= -1 && e.ColumnIndex!= -1 && dataGridView1 [e.ColumnIndex,e.RowIndex]!= null && dataGridView1 [e.ColumnIndex,e.RowIndex] .Selected)' – OhBeWise

+0

不是我正在尋找的東西,而是一個非常有用的解決方案! – JPProgrammer

相關問題