Forums Neueste Beiträge
 

Cursor in DataGridView-Zelle

25/02/2009 - 21:51 von Josef Morlo | Report spam
Hallo allerseits,

VS 2005 Express

Ich habe ein 'ungebundenes' DataGridView-Control,
das mir einige Nutzereingaben aufnehmen soll. Die Eingabe des
Wertes für die erste Spalte erfolgt per Code.

Wie kann ich erreichen, dass ich nach dem Einlesen des
schreibgeschützen Wertes der ersten Spalte in der zweiten
einen *blinkenden Cursor* habe?

Ich habs so probiert:

Private Sub MyForm_Load(ByVal sender As Object, ByVal e As
System.EventArgs) Handles Me.Load
With Me.dgv
.Rows.Add()
.CurrentRow.Cells(0).Value = "MyValue"

.CurrentRow.Cells(1).Selected = True

'oder

.CurrentCell = .CurrentRow.Cells(1)

End with

In beiden Fàllen wird zwar die gewünschte Zelle angesprochen, einen
blinkenden Cursor habe ich allerdings nur dann, wenn ich per Tastendruck
navigiere oder die Zelle mit der Maus anklicke. Wie kann ich das per Code
erledigen?

Danke fürs Interesse.

Gruß
Josef Morlo
 

Lesen sie die antworten

#1 Peter Götz
26/02/2009 - 10:00 | Warnen spam
Hallo Josef,

Ich habe ein 'ungebundenes' DataGridView-Control,
das mir einige Nutzereingaben aufnehmen soll. Die
Eingabe des Wertes für die erste Spalte erfolgt per
Code.

Wie kann ich erreichen, dass ich nach dem Einlesen
des schreibgeschützen Wertes der ersten Spalte in
der zweiten einen *blinkenden Cursor* habe?



Gar nicht.
Eine DataGridViewCell wird erst dann in den Edit-
Modus versetzt, wenn mit der Maus zweimal darauf
geklickt wird oder das Beschreiben der Zelle über die
Tastatur begonnen wird. Das ist soweit auch ganz
sinnvoll, damit beim Durchlaufen mehrerer Zellen
z.B. durch Drücken der CursorTasten nicht für jede
Zelle der EditModus sofort eingeschaltet und dann
wieder ausgeschaltet werden muss, ohne dass
irgendwelche Daten geàndert würden.

Wenn Du die DGV.CurrentCell per Code setzt,
kann der Benutzer in der jeweiligen CurrentCell
sofort via Tastatur mit seiner Eingabe beginnen,
auch ohne blinkenden Cursor.

Im nachfolgenden Beispiel wird alle 3 Sekunden zur
nàchsten Zelle resp. der ersten Zelle der nàchsten
Zeile gewechselt und es kann sofort in die akt.
ausgewàhlte Zelle via Tastatur geschrieben werden.


' /// Code in einem leeren Formmodul (Form1)
Public Class Form1
Private WithEvents DGV As DataGridView
Private mDT As DataTable
Private mDV As DataView
Private mCM As CurrencyManager
Private WithEvents mTimer As Windows.Forms.Timer
Private mRow As Integer
Private mCol As Integer

Private Sub Form1_Load _
(ByVal sender As System.Object, _
ByVal e As System.EventArgs _
) Handles MyBase.Load

CreateData()

DGV = New DataGridView
With DGV
.DefaultCellStyle.Font = _
New Font("Arial", 12)

.ColumnHeadersDefaultCellStyle.Font = _
New Font("Arial", 8, FontStyle.Bold)

.SetBounds _
(10, 10, _
Me.ClientSize.Width - 20, _
Me.ClientSize.Height - 20)

.Anchor = _
AnchorStyles.Left Or _
AnchorStyles.Top Or _
AnchorStyles.Right Or _
AnchorStyles.Bottom

.DataSource = mDV

End With
Me.Controls.Add(DGV)

DGV.Columns(0).DefaultCellStyle.Alignment = _
DataGridViewContentAlignment.MiddleRight

DGV.AutoResizeColumns()

mTimer = New Windows.Forms.Timer
mCol = 1
mTimer.Interval = 300
mTimer.Start()
End Sub


Private Sub CreateData()
Dim i As Integer
Dim DR As DataRow

mDT = New DataTable
With mDT
.Columns.Add("ID", GetType(Integer))
.Columns.Add("SText", GetType(String))
.Columns.Add("LText", GetType(String))

For i = 1 To 12
DR = .NewRow
DR.Item(0) = i
DR.Item(1) = MonthName(i, True)
DR.Item(2) = MonthName(i, False)
.Rows.Add(DR)
Next
.AcceptChanges()
End With

mDV = New DataView(mDT)

mCM = DirectCast _
(Me.BindingContext(mDV), _
CurrencyManager)
End Sub


Private Sub mTimer_Tick _
(ByVal sender As Object, _
ByVal e As System.EventArgs _
) Handles mTimer.Tick

DGV.CurrentCell = DGV.Rows(mRow).Cells(mCol)

If mCol < (mDT.Columns.Count - 1) Then
mCol += 1
Else
mCol = 0
End If

If mCol = 0 Then
If mRow < (mDT.Rows.Count - 1) Then
mRow += 1
Else
mRow = 0
End If
End If

If mTimer.Interval < 3000 Then
mTimer.Interval = 3000
End If
End Sub
End Class
' \\\ E N T E

Mehr Beispiele zum DataGridView findest Du unter

www.gssg.de -> Visual Basic -> VB.net

Gruß aus St.Georgen
Peter Götz
www.gssg.de (mit VB-Tipps u. Beispielprogrammen)

Ähnliche fragen