Wie erzwinge DataGridView aktuellen Zellenumriss ohne Drücken von Tab - c #, winforms, Benutzeroberfläche, Datagridview

Gibt es einen Weg, um es so zur aktuellen Zelle der DataGridView Immer hat der gestrichelte Rahmen um ihn herum, den du bekommst, wenn du auf drückst Tab Taste? Ich habe bemerkt, dass, wenn Sie die gedrückt haben Tab Wenn die Taste einmal gedrückt wird, hat die aktuelle Zelle immer die Umrandung, aber ich möchte diese Grenze von Anfang an haben, ohne die Taste drücken zu müssen Tab Taste.

Zurzeit sende ich programmatisch den Tab-Schlüssel wie folgt:

SendKeys.Send("{TAB}");

Aber das ist kludgy und ich hätte lieber eine richtige Lösung, wenn eine verfügbar ist.

Bearbeiten: Ich habe vergessen zu erwähnen, dass die SelectionMode ist eingestellt auf FullRowSelect und ich möchte das nicht ändern. Ich möchte, dass die Umrandung nur um die aktuelle Zelle und die ganze Reihe herum hervorgehoben wird.

Antworten:

2 für die Antwort № 1

Erstellen Sie eine neue Klasse, von der übernommen werden soll DataGridView und überschreibe die ShowFocusCues Eigentum - zurückkehrend True zu immer zeige das Fokusrechteck oder False zu noch nie Zeig es. Sie können sogar eine öffentliche Eigenschaft hinzufügen, um sie anzuzeigen, wenn Sie sie nach Belieben ändern möchten.

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

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

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

Hinweis: Dies wird nur die fokussieren CurrentCell so verhält es sich eben. Also sogar mit FullRowSelect festgelegt, wird nur eine der ausgewählten Zellen in der markierten Zeile fokussiert.


1 für die Antwort № 2

Dieses Verhalten scheint in Windows-Formularen fest codiert zu sein. Ich glaube nicht, dass Sie einen besseren Weg finden könnten, es zu kodieren.

Ein Vorschlag, den ich Ihnen vorschlagen kann, ist der Umgang mit dem DataGridView.CellPainting Ereignis und um die Grenze manuell zu zeichnen.Sie können dann den Rahmen mit dem gewünschten Stil zeichnen, damit die aktuelle Zelle für den Benutzer besser sichtbar ist als mit der Methode "TAB". Hier ist ein Beispiel mit einer roten gestrichelten Umrandung:

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;
}
}