Чтобы уточнить версию memcpy. I thnk это необходимо для ARM, который не может иметь неверные данные.
Я создал структуру, содержащую только первые два поля (мне нужен только порт)
struct sockaddr_in_header {
sa_family_t sin_family; /* address family: AF_INET */
in_port_t sin_port; /* port in network byte order */
};
Затем, чтобы получить порт, я использовал memcpy для перемещения данных в стек
struct sockaddr_in_header sinh;
unsigned short sin_port;
memcpy(&sinh, conn->local_sockaddr, sizeof(struct sockaddr_in_header));
И вернул порт
sin_port = ntohs(sinh.sin_port);
. Этот ответ действительно связан с получением порта на руке
Как мне наложить указатель sockaddr на sockaddr_in на Arm
Силы, которые будут думать, что это тот же вопрос, что и этот, однако я не хочу игнорировать предупреждения. Опыт научил меня, что это плохая идея.
Вам нужно установить текущую ячейку на ту, которую вы хотите отредактировать, а затем вызвать BeginEdit в обработчике Loaded:
dataGrid1.CurrentCell = new DataGridCellInfo(
dataGrid1.Items[0], dataGrid1.Columns[3]);
dataGrid1.BeginEdit();
Если вы дадите своему DataGridTextColumn имя в XAML вы можете использовать это имя вместо Столбцы [3]
.
У меня есть datagrid с TextBox в DataTemplate DataGridTemplateColumn. Также я использую, Входят вместо Вкладки, чтобы сфокусировать Текстовое поле
private void DataGrid_PreviewKeyDown(object sender, KeyEventArgs e)
{
if (e.Key == Key.Enter)
{
e.Handled = true;
var TabKey = new KeyEventArgs(e.KeyboardDevice, e.InputSource, e.Timestamp, Key.Tab);
TabKey.RoutedEvent = Keyboard.KeyDownEvent;
InputManager.Current.ProcessInput(TabKey);
}
}
, я решаю проблему фокуса с комбинацией этого кода:
dataGrid.Focus();
//In case of more columns
//dataGrid.CurrentCell = new DataGridCellInfo(dataGrid.Items[0], dataGrid.Columns[1]);
dataGrid.BeginEdit();
(Keyboard.FocusedElement as UIElement).MoveFocus(new TraversalRequest(FocusNavigationDirection.Next));