При преобразовании кадра клавиатуры следует передать 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()
}
}
DataGridView. Свойство CurrentCell может использоваться для очистки прямоугольника фокусировки.
Можно установить это свойство (DataGridView. CurrentCell) к пустому указателю для временного удаления прямоугольника фокусировки но то, когда управление получает фокус и значение этого свойства, является пустым, он автоматически установлен на значение свойства FirstDisplayedCell.
http://msdn.microsoft.com/en-us/library/system.windows.forms.datagridview.currentcell.aspx
Я нашел что 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
обработчик событий не влияет на желаемое поведение, но я оставил его во фрагменте кода, потому что я заметил для своих потребностей, по крайней мере, было лучше только присоединить обработчик после привязки данных, так, чтобы я избежал, чтобы выбор изменил событие, повышаемое для каждого связанного объекта.
Я провел часы для нахождения решения для этой проблемы. Сделайте это:
Добавьте следующий код к своему классу 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
Удачи!