none
WindowForms - DataGridView - CurrentCell - Tastaturfokus RRS feed

  • Frage

  • Hallo,

    ich hab ein Problem, wenn es darum geht nicht nur den Visuellen, sondern auch den Tastaturfokus auf eine bestimmte Zelle zu setzen.

    Hab mittlerweile schon einige Möglichkeiten ausprobiert und bin ständig daran gescheitert.

    private void dataGridViewPositions_CellStateChanged(object sender, DataGridViewCellStateChangedEventArgs e)
            {
                if (e.StateChanged == DataGridViewElementStates.Selected)
                {
                    if (((OnePositionDataItems)e.Cell.OwningRow.DataBoundItem).Position < 0)
                    {
                        int index = this.dataGridViewPositions.Rows.IndexOf(e.Cell.OwningRow);
                        
                        if (index == _InvoiceManager.getDetailViewIndex_FromPosition((OnePositionDataItems)e.Cell.OwningRow.DataBoundItem, true))
                        {   
                            if (index + 2 < this.dataGridViewPositions.Rows.Count)
                            {   
    
                                this.dataGridViewPositions.Rows[index].Selected = false;
                                this.dataGridViewPositions.CurrentCell = this.dataGridViewPositions.Rows[index + 2].Cells[e.Cell.OwningColumn.Index];
                                this.dataGridViewPositions.CurrentCell.Selected = true;
                                this.dataGridViewPositions.Refresh();
                            }
                        }
                        else 
                        {   
    
                            if (index + 1 < this.dataGridViewPositions.Rows.Count)
                            {   
                                SendKeys.Send("{up}");
                            }
                        }
                    }
                }
            }

    Was ich will ist, daß bestimmte Zeilen oder auch Zellen keinen Fokus bekommen sollten von der Benutzerebene her.

    Der Visuelle Fokus wird gesetzt, jedoch nicht der Tastaturfokus. Mit dieser Variante wie oben, sieht man im Zeilenkopf für ein paar Sekunden, daß der Tastaturfokus doch richtig wechselt aber dann wieder zurückspringt.

    Mit der äußerst unschönen Variante des 'SendKeys', hab ich das Problem lösen können, denke jedoch nicht, daß dies der Sinn und Zweck einer so einen Sache ist.

    Bitte um Untestützung,

    Thomas E.

    Dienstag, 9. April 2013 17:32

Alle Antworten

  • Hi Thomas,

    ich würde jetzt einfach die Zelle auf ReadOnly setzen. Damit hat man dann auch einen optischen Hinweis.

    http://msdn.microsoft.com/de-de/library/system.windows.forms.datagridviewcell.readonly.aspx

    MFG

    Björn

    p.s.

    Ich denk das C# Forum ist für die Frage besser geeignet. (Wenn du in denn passenden Foren die Frage stellst, bekommst du meistens schneller eine Antwort.)

    http://social.msdn.microsoft.com/Forums/de-DE/visualcsharpde/threads

    • Bearbeitet Palin Dienstag, 9. April 2013 18:33
    Dienstag, 9. April 2013 18:30
  • Es sind auch schon alle Zellen die den Fokus nicht bekommen sollten auf ReadOnly gesetzt.

    Es geht darum, daß wenn sich der Benutzer durch das DataGrid arbeitet, nur auf solche Zellen navigieren kann mit der Tastatur oder Maus, welche er auch bearbeiten kann. Bei ReadOnly kann er es zwar nicht bearbeiten, bekommt aber trotzdem den Fokus wenn man sich mit der Tastatur von Zelle 1 nach Zelle 3 durchdrückt und Zelle 2 ist  ReadOnly, überspringt er jedoch diese Zelle nicht, wie gewünscht.

    Auf deinen angegebenen Link, steht ja auch folgendes :

    Sie können zu einer schreibgeschützten Zelle navigieren, und Sie können eine schreibgeschützte Zelle als aktuelle Zelle festlegen.

    ReadOnly wirkt sich nur darauf aus, ob eine Zelle bearbeitet werden kann, und nicht darauf, ob der Benutzer Zeilen löschen kann.

    Kann ein Moderator bitte diesen Thread verschieben wo er am besten aufgehoben ist, bitte danke..

    Danke Björn


    • Bearbeitet Thomas__ Mittwoch, 10. April 2013 06:11
    Mittwoch, 10. April 2013 06:10
  • Hab nun diese Frage ins andere Forum gepostet, also kann das hier gelöscht werden, danke !
    Montag, 15. April 2013 06:34