private void SearchTextBox_KeyUp(object sender, KeyEventArgs e) { if (timer.IsEnabled) { //stop timer for "no matches" message immediately Timer_Tick(null, null); } if (e == null || e.Key == Key.Return || e.Key == Key.F3) { ShmVarDataGrid.UnselectAll(); int i = 0; for (i = startIndx; i < ShmVarDataGrid.Items.Count; i++) { SharedMemoryVariable currentVar = ShmVarDataGrid.Items[i] as SharedMemoryVariable; if (currentVar.Name.ToUpper().IndexOf(searchTextBox.Text.ToUpper()) == 0) { ShmVarDataGrid.SelectedItem = ShmVarDataGrid.Items[i]; startIndx = i + 1; ShmVarDataGrid.ScrollIntoView(ShmVarDataGrid.SelectedItem); break; } } if (i == ShmVarDataGrid.Items.Count) { //not found startIndx = 0; borderFindNoMatches.Visibility = Visibility.Visible; //instead of a message box, show a hint in the search area timer.Start(); //start timer to hide the hint after a short time searchTextBox.Focus(); } } }
private void AddNewRow() { //MessageBox.Show("AddNewRow"); //20130730,SKK if (xref == null) { return; } //add a new shared memory variable at the end of the list xref.GetSharedMemoryManager().AddNewShmVarWithDefaultValue(); //first set focus ShmVarDataGrid.Focus(); //select the last element of the list ShmVarDataGrid.SelectedItem = ListOfShmVariables.Last(); //then create a new cell info, with the item we wish to edit and the column number of the cell we want in edit mode DataGridCellInfo cellInfo = new DataGridCellInfo(ShmVarDataGrid.SelectedItem, ShmVarDataGrid.Columns[0]); //set the cell to be the active one ShmVarDataGrid.CurrentCell = cellInfo; //scroll the item into view ShmVarDataGrid.ScrollIntoView(ShmVarDataGrid.SelectedItem); //begin the edit ShmVarDataGrid.BeginEdit(); }
private void UserControl_LostKeyboardFocus(object sender, KeyboardFocusChangedEventArgs e) { if (!this.IsMouseOver && !contextMenuOpening) { //if the user clicks somewhere outside of this control while being in edit mode in the data grid, edit mode must be quit //ShmVarDataGrid.CancelEdit(); ShmVarDataGrid.CommitEdit(DataGridEditingUnit.Row, true); //we use commit edit, so that the behaviour is the same as clicking somewhere else within the control; this allows committing e.g. an invalid name, but this case must be handled separately anyway (SHM variables must not be used for new connections while the editor is in "invalid" state) } //MessageBox.Show("UserControl_LostKeyboardFocus"); contextMenuOpening = false; }
private void DeleteSelectedRows() { if (xref == null) { return; } if (ShmVarDataGrid.SelectedItems.Count > 0 && MessageBox.Show("Do you really want to delete all selected variables?", "ViGET V2.0", MessageBoxButton.YesNo, MessageBoxImage.Question) != MessageBoxResult.Yes) { return; } foreach (var item in ShmVarDataGrid.SelectedItems) { SharedMemoryVariable shmVar = item as SharedMemoryVariable; if (shmVar.ConnectionCounter > 0) { MessageBox.Show("At least one of the selected variables can not be deleted, because it is connected.\n\nNone of the selected variables will be deleted.", "Delete Not Possible"); return; } } int indexOfLastDeletedRow = -1; //remove all selected rows(shared memory variables) while (ShmVarDataGrid.SelectedItems.Count > 0) { indexOfLastDeletedRow = ShmVarDataGrid.SelectedIndex; xref.GetSharedMemoryManager().RemoveShmVar((ShmVarDataGrid.SelectedItem as SharedMemoryVariable).Name); } //first set focus ShmVarDataGrid.Focus(); //set selected either the last row or the row below last deleted row ShmVarDataGrid.SelectedIndex = Math.Min(indexOfLastDeletedRow, ListOfShmVariables.Count - 1); //make the selected item visible if (ShmVarDataGrid.SelectedItem != null) { //then create a new cell info, with the item we wish to edit and the column number of the cell we want in edit mode DataGridCellInfo cellInfo = new DataGridCellInfo(ShmVarDataGrid.SelectedItem, ShmVarDataGrid.Columns[0]); //set the cell to be the active one ShmVarDataGrid.CurrentCell = cellInfo; //scroll the item into view ShmVarDataGrid.ScrollIntoView(ShmVarDataGrid.SelectedItem); } }
private void UserControl_PreviewKeyDown(object sender, KeyEventArgs e) { if (!(e.OriginalSource is TextBox) && e.Key == Key.Insert) { AddShmVar_Click(null, null); e.Handled = true; } if (e.Key == Key.Delete) { if (e.OriginalSource is TextBox) { //THIS IS SPECIAL CODE TO FIX AN ISSUE THAT ONLY EXISTS IN THE ViGET FRAMEWORK: //the ViGET frame catches all key down events for the Del key (and others), so it is not reveived any more here //workaround: at least do delete in text boxes on key up of the Del key TextBox textBox = (TextBox)e.OriginalSource; if (textBox.SelectionLength > 0) { //delete selected text int pos = textBox.SelectionStart; textBox.Text = textBox.Text.Substring(0, textBox.SelectionStart) + textBox.Text.Substring(textBox.SelectionStart + textBox.SelectionLength); textBox.Select(pos, 0); } else { //delete one character int pos = textBox.SelectionStart; if (pos < textBox.Text.Length) { textBox.Text = textBox.Text.Substring(0, textBox.SelectionStart) + textBox.Text.Substring(textBox.SelectionStart + 1); textBox.Select(pos, 0); } } } else { //delete variables DelShmVar_Click(null, null); e.Handled = true; } } //ctrl+A for select all if (!(e.OriginalSource is TextBox) && e.Key == Key.A) { if ((Keyboard.Modifiers & ModifierKeys.Control) == ModifierKeys.Control) { ShmVarDataGrid.SelectAll(); } e.Handled = true; } //ctrl+F for go to search text box if (!(e.OriginalSource is TextBox) && e.Key == Key.F) { if ((Keyboard.Modifiers & ModifierKeys.Control) == ModifierKeys.Control) { //toggle visibility of search panel /*if (panelSearch.Visibility != Visibility.Visible) * { * panelSearch.Visibility = Visibility.Visible; * searchTextBox.Focus(); * } * else * { * panelSearch.Visibility = Visibility.Collapsed; * }*/ searchTextBox.Focus(); } e.Handled = true; } //F3 for continue search if (!(e.OriginalSource is TextBox) && e.Key == Key.F3) { SearchTextBox_KeyUp(null, null); e.Handled = true; } }