views:

169

answers:

0

I'm running C# 2.0, and I've written an application with a DataGridView in virtualmode and a TreeView in the same form, but in different panels of a SplitContainer.

My application has a "find all" function that finds all instances of a certain string, and adds them as the child nodes to a new node to the TreeView (it's a tree view because you can have multiple search results by having different root nodes).

That idea is that when you click on one of those search results in the TreeView, that it would select the specific text of that result in the DataGridView (Virtually the same as Notepad++'s find all function)

When I click on the TreeView, it does set the selected cell of the DataGridView and highlight the specific text, but it loses that specific text selection instantly (but keeps the cell selection) because by clicking on the TreeView the DataGridView loses focus.

Here's the code for the AfterSelect of the TreeView: (SearchResult is my own class)

   private void Tree_Results_AfterSelect(object sender, TreeViewEventArgs e)
   {
       if (e.Node.Level > 0)
        {
            SearchResult SelectedItem = (SearchResult)Tree_Results.SelectedNode.Tag;
            DataViewMain.CurrentCell = DataViewMain[SelectedItem.TypeIndex, SelectedItem.LineIndex];
            DataViewMain.BeginEdit(false);
            DataGridViewTextBoxEditingControl SelectionData = (DataGridViewTextBoxEditingControl)DataViewMain.EditingControl;
            SelectionData.SelectionStart = SelectedItem.HighlightStart;
            SelectionData.SelectionLength = SelectedItem.HightlightLength;
        }
    }

If the DataGridView were a text box I could possibly set HideSelection to false, but DataGridViews have no such property (and changing the Hide Selection for the EditingControl does nothing)

Any ideas? I'm receptive to a different control instead of a TreeView that would allow my DataGridView to retain focus, but I need to keep the controls on separate panels so I have a way of collapsing the search results panel.