2009-05-13 4 views
1

In einem TextBox könnte ich textBox1.SelectionStart = 4 verwenden. Wie kann ich dies in einem DataGridView tun?C#: Caret-Position in einer DataGridView ändern

zur Klärung bearbeiten: angenommen, eine bestimmte Zelle ist bereits ausgewählt und im Bearbeitungsmodus. Wenn ich die rechte Pfeiltaste drücke, bewegt sich der Cursor über den Text in dieser Zelle an die richtige Position. Ich möchte einen Button erstellen, der das Gleiche macht.

Antwort

2

Sie sollten wahrscheinlich ein wenig klären. Möchten Sie die ausgewählte Zeile in einem DataGridView ändern oder gibt es ein Textfeld in Ihrem DataGridView, für das Sie den Cursor verschieben möchten?

Wenn Sie die ausgewählte Zeile ändern möchten, versuchen Sie die SelectedIndex-Eigenschaft.

0

Sie müssen die TextBox über das EditingControlShowing-Ereignis von DataGridView abrufen.

Speichern Sie dies ist eine Member-Variable, und wenn Sie benötigen, auf die TextBox Mitglied zugreifen und setzen Sie die SelectionStart, wie Sie oben geschrieben.

So etwas wie;

dataGrid.EditingControlShowing += this.dataGrid_EditingControlShowing; 

und

void dataGrid_EditingControlShowing(object sender, DataGridViewEditingControlShowingEventArgs e) 
     { 
      if(this.dataGrid.CurrentCell != null && e.Control is TextBox) 
      { 
       this.currentTextBox = (TextBox)e.Control; 
      } 
     } 
+0

Ich habe das ausprobiert, aber wenn ich (zum Beispiel) die linke Maustaste drücken, wird die gesamte Zelle neu ausgewählt. –

0

Jedes Mal, wenn der Benutzer Ihre Schaltfläche klicken würde, die Zelle im Datagridview würden den Fokus verlieren, so dass es das Bearbeitungsfeld entfernen, um den Wert validieren, und setzen Sie den formatierten Wert in die Zelle.

Ich frage mich, was deine Gründe dafür sind, dass ein Knopf den Caret bewegt?

+0

Ich programmiere eine Mensch-Maschine-Schnittstelle, die keinen Zugriff auf eine Tastatur hat, aber immer noch die Fähigkeit haben muss, eine Xml-Konfigurationsdatei zu bearbeiten. Ich arbeite jetzt an einer Lösung; Im Grunde werde ich überwachen, wenn EditingControlShowing ausgelöst wird (nach Thies Vorschlag), aber einfach die aktuelle Zelle in ein Feld anstatt in das Textfeld speichern. Wenn SelectionChanged ausgelöst wird, werde ich currentCell auf null setzen. Wenn dann der Butto gedrückt wird, überprüfe ich, ob es eine currentCell gibt, wähle sie aus und benutze dataGridView.BeginEdit (false). Natürlich muss ich auch die Caret-Position speichern ... –

+0

edit: sieht aus wie ich die aktuelle Zelle nicht speichern muss, da es nicht zurückgesetzt wird, wenn die DataGridView den Fokus verliert. –

1
private void RadGridView1_SelectionChanged(object sender, Telerik.Windows.Controls.SelectionChangeEventArgs e) 
{ 
    RadGridView1.CurrentItem = RadGridView1.SelectedItem; 
}