WinForms - DataGridView - никакая ячейка выбран

При преобразовании кадра клавиатуры следует передать nil параметру from. Это правильно преобразует из оконных координат (как указано в документации UIView convert).

Ваш код также будет проще, если вы избежите всего кодирования Objective-C.

private func keyboardWillShow(_ aNotification: Notification) {
    guard let info = aNotification.userInfo,
        let endFrame = info[UIWindow.keyboardFrameEndUserInfoKey] as? NSValue,
        let rate = info[UIWindow.keyboardAnimationDurationUserInfoKey] as? NSNumber
        else { return }

    let currentKeyboard = endFrame.cgRectValue
    let convertedFrame = self.view.convert(currentKeyboard, from: nil)
    bottomConstraint.constant = self.view.frame.height - convertedFrame.origin.y

    UIView.animate(withDuration: rate.doubleValue) {
        self.view.layoutIfNeeded()
    }
}
11
задан Zach Johnson 20 November 2009 в 00:39
поделиться

3 ответа

DataGridView. Свойство CurrentCell может использоваться для очистки прямоугольника фокусировки.

Можно установить это свойство (DataGridView. CurrentCell) к пустому указателю для временного удаления прямоугольника фокусировки но то, когда управление получает фокус и значение этого свойства, является пустым, он автоматически установлен на значение свойства FirstDisplayedCell.

http://msdn.microsoft.com/en-us/library/system.windows.forms.datagridview.currentcell.aspx

10
ответ дан 3 December 2019 в 02:53
поделиться

Я нашел что DataGridView.CurrentCell = null не работал на меня при попытке получить требуемое поведение.

То, что я закончил тем, что использовал, было:

    private void dgvMyGrid_DataBindingComplete(object sender, DataGridViewBindingCompleteEventArgs e)
    {
        if (dgvMyGrid.SelectedRows.Count > 0)
        {
            dgvMyGrid.SelectedRows[0].Selected = false;
        }

        dgvMyGrid.SelectionChanged += dgvMyGrid_SelectionChanged;
    }

Это должно было быть в DataBindingComplete обработчик событий.

Где Вы присоединяете SelectionChanged обработчик событий не влияет на желаемое поведение, но я оставил его во фрагменте кода, потому что я заметил для своих потребностей, по крайней мере, было лучше только присоединить обработчик после привязки данных, так, чтобы я избежал, чтобы выбор изменил событие, повышаемое для каждого связанного объекта.

6
ответ дан 3 December 2019 в 02:53
поделиться

Я провел часы для нахождения решения для этой проблемы. Сделайте это:

  1. Создайте проект формы
  2. Добавьте DataGridView с именем "DataGridView1"
  3. Добавьте следующий код к своему классу Form1

    Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
    
    Dim dgvRow(17) As DataGridViewRow
    Dim i As Integer
    For i = 0 To dgvRow.Length - 1
        dgvRow(i) = New DataGridViewRow()
        dgvRow(i).Height = 16
        dgvRow(i).Selected = False
        dgvRow(i).ReadOnly = True
        DataGridView1.Rows.Add(dgvRow(i))
        DataGridView1.CurrentRow.Selected = False
    Next
    End Sub
    

importaint строка кода

    DataGridView1.CurrentRow.Selected = False

Удачи!

3
ответ дан 3 December 2019 в 02:53
поделиться
Другие вопросы по тегам:

Похожие вопросы: