@@ -87,11 +87,13 @@ private void UpdateTab()
8787
8888 protected override bool CanExecuteImpl ( object parameter )
8989 {
90- if ( _vbe . ActiveCodePane == null || _state . Status != ParserState . Ready )
90+ if ( _state . Status != ParserState . Ready ||
91+ ( _vbe . ActiveCodePane == null
92+ && ( _vbe . SelectedVBComponent == null || ! _vbe . SelectedVBComponent . HasDesigner ) ) )
9193 {
9294 return false ;
9395 }
94-
96+
9597 var target = FindTarget ( parameter ) ;
9698 var canExecute = target != null ;
9799
@@ -153,6 +155,14 @@ private SearchResultsViewModel CreateViewModel(Declaration declaration)
153155 }
154156
155157 private Declaration FindTarget ( object parameter )
158+ {
159+ var component = _vbe . SelectedVBComponent ;
160+ return ( component != null && component . HasDesigner )
161+ ? FindFormTarget ( )
162+ : FindCodeTarget ( parameter ) ;
163+ }
164+
165+ private Declaration FindCodeTarget ( object parameter )
156166 {
157167 var declaration = parameter as Declaration ;
158168 if ( declaration != null )
@@ -163,6 +173,30 @@ private Declaration FindTarget(object parameter)
163173 return _state . FindSelectedDeclaration ( _vbe . ActiveCodePane ) ;
164174 }
165175
176+ private Declaration FindFormTarget ( )
177+ {
178+ var project = _vbe . ActiveVBProject ;
179+ var component = _vbe . SelectedVBComponent ;
180+
181+ if ( component != null && _vbe . SelectedVBComponent . HasDesigner )
182+ {
183+ var designer = ( ( dynamic ) component . Target ) . Designer ;
184+ var selectedCount = ( int ) designer . Selected . Count ;
185+
186+ if ( selectedCount > 1 ) { return null ; }
187+
188+ var selectedType = selectedCount == 0 ? DeclarationType . ClassModule : DeclarationType . Control ;
189+ string selectedName = selectedCount == 0 ? component . Name : designer . Selected [ 0 ] . Name ;
190+
191+ return _state . DeclarationFinder . MatchName ( selectedName )
192+ . First ( m => m . ProjectId == project . HelpFile
193+ && m . DeclarationType . HasFlag ( selectedType )
194+ && m . ComponentName == component . Name ) ;
195+ }
196+ return null ;
197+ }
198+
199+
166200 public void Dispose ( )
167201 {
168202 if ( _state != null )
0 commit comments