Home | Contact Us | FAQ | Search & Site Map | Link to Us
Sign In | Join | Other 45 Sites in Network
HomeAnnouncementsFree MagazinesWhite PapersSubmit Content
Discussion GroupsASP.NETWindows FormsLanguages.NET FrameworkVisual Studio.NET
Articles.NET FrameworkASP.NETToolsWindows Forms
.NET DirectoryOpen Source ProjectsUser GroupsWeb Resources
Related Topics
Visual Basic 6SQL ServerMS AccessOther DB ProductsMS Server ProductsMore Topics ...

.NET Forum / Windows Forms / WinForm Controls / October 2008

Tip: Looking for answers? Try searching our database.

Set Focus To Specific Property In Property Grid

Thread view: 
Enable EMail Alerts  Start New Thread
Thread rating: 
Derek Hart - 27 Sep 2008 21:40 GMT
I can set focus to my property grid by using propgrid.Focus - but how can I
set the default property that is always first? Or just set focus to the
default property? Can this be done?
kimiraikkonen - 28 Sep 2008 10:51 GMT
> I can set focus to my property grid by using propgrid.Focus - but how can I
> set the default property that is always first? Or just set focus to the
> default property? Can this be done?

Hi Derek,

To select(or focus) a pre-defined property in a PropertyGrid control
programmatically, you can use loop through GridItems and check "label"
to determine which item to be selected:

'------Begin-----
Dim GridItem As GridItem = PropertyGrid1.SelectedGridItem
Dim pGridItem As GridItem = GridItem.Parent
For Each egi As GridItem In pGridItem.GridItems
If egi.Label = "property_label_here" Then
PropertyGrid1.Focus()
egi.Select()
End If
Next
'------End-------

Hope this helps,

Onur Güzel
Derek Hart - 28 Sep 2008 18:33 GMT
Thank you for the answer. Just need to add one thing to it. I am running
this code on the keydown event for a textbox control. It sets focus to the
grid properly now. But I need to trap the keystroke that was hit and fill it
in as the first character in the property, just like how Visual Studio works
when you are on a control and hit the first keyboard character and it starts
typing in the default property for that control. Is this possible?

On Sep 27, 11:40 pm, "Derek Hart" <derekmh...@yahoo.com> wrote:
> I can set focus to my property grid by using propgrid.Focus - but how can
> I
> set the default property that is always first? Or just set focus to the
> default property? Can this be done?

Hi Derek,

To select(or focus) a pre-defined property in a PropertyGrid control
programmatically, you can use loop through GridItems and check "label"
to determine which item to be selected:

'------Begin-----
Dim GridItem As GridItem = PropertyGrid1.SelectedGridItem
Dim pGridItem As GridItem = GridItem.Parent
For Each egi As GridItem In pGridItem.GridItems
If egi.Label = "property_label_here" Then
PropertyGrid1.Focus()
egi.Select()
End If
Next
'------End-------

Hope this helps,

Onur Güzel
kimiraikkonen - 28 Sep 2008 19:27 GMT
> Thank you for the answer. Just need to add one thing to it. I am running
> this code on the keydown event for a textbox control. It sets focus to the
[quoted text clipped - 30 lines]
>
> Onur Güzel

As far as i understand (i couldn't guess well maybe), you're wanting
something like IntelliSense or setting the value of a property within
textbox, and setting PropertyGrid item's value outside PropertyGrid
control is not possible, because "Value" property is ReadOnly.

Or, my another guess that if you want to highlight a property grid
item which is inside PropertyGrid control while initial key matches
with the text in textbox you can use that:

'--------------Begin-------------
Private Sub TextBox1_KeyDown(ByVal sender As System.Object, _
ByVal e As System.Windows.Forms.KeyEventArgs) _
Handles TextBox1.KeyDown

Dim GridItem As GridItem = _
PropertyGrid1.SelectedGridItem
Dim pGridItem As GridItem = _
GridItem.Parent
For Each egi As GridItem In _
pGridItem.GridItems
If egi.Label.StartsWith(e.KeyData.ToString) Then
PropertyGrid1.Focus()
egi.Select()
End If
Next

End Sub
'--------End----------

HTH,

Onur Güzel
Derek Hart - 28 Sep 2008 23:17 GMT
Not quite. When I am in Visual Studio designing a form, and I highlight a
text box, when I then hit a letter, such as "T", it moves the cursor to the
property grid into the text property and enters "T" - then then user can
type the rest of the text in this property.  Make sense?

On Sep 28, 8:33 pm, "Derek Hart" <derekmh...@yahoo.com> wrote:
> Thank you for the answer. Just need to add one thing to it. I am running
> this code on the keydown event for a textbox control. It sets focus to the
[quoted text clipped - 36 lines]
>
> Onur Güzel

As far as i understand (i couldn't guess well maybe), you're wanting
something like IntelliSense or setting the value of a property within
textbox, and setting PropertyGrid item's value outside PropertyGrid
control is not possible, because "Value" property is ReadOnly.

Or, my another guess that if you want to highlight a property grid
item which is inside PropertyGrid control while initial key matches
with the text in textbox you can use that:

'--------------Begin-------------
Private Sub TextBox1_KeyDown(ByVal sender As System.Object, _
ByVal e As System.Windows.Forms.KeyEventArgs) _
Handles TextBox1.KeyDown

Dim GridItem As GridItem = _
PropertyGrid1.SelectedGridItem
Dim pGridItem As GridItem = _
GridItem.Parent
For Each egi As GridItem In _
pGridItem.GridItems
If egi.Label.StartsWith(e.KeyData.ToString) Then
PropertyGrid1.Focus()
egi.Select()
End If
Next

End Sub
'--------End----------

HTH,

Onur Güzel
kimiraikkonen - 29 Sep 2008 09:37 GMT
> Not quite. When I am in Visual Studio designing a form, and I highlight a
> text box, when I then hit a letter, such as "T", it moves the cursor to the
[quoted text clipped - 76 lines]
>
> Onur Güzel

Now got it what you desribe in VS. But couldn't associate your aim
with a textbox and typing in a defaul property of a propertygrid
control. For example, you can make a property default by using
"DefaultPropertyAttribute" in your class, for example you can design
your class whose default property is "Title" as follows:

<DefaultPropertyAttribute("Title")> _
Public Class SampleProperty

   Private _Title As String

   <CategoryAttribute("Application"), _
      Browsable(True), _
      [ReadOnly](False), _
      BindableAttribute(False), _
      DefaultValueAttribute(""), _
      DesignOnly(False), _
      DescriptionAttribute("Enter Title for the application")> _
      Public Property Title() As String
       Get
           Return _Title
       End Get
       Set(ByVal Value As String)
           _Title = Value
       End Set
   End Property

Now, when you associate that class with PropertyGrid using:
"PropertyGrid1.SelectedObject = New SampleProperty" preferably in
form1_load event, "Title" property is pre-selected in gray and when
you type in a textbox using the code above, it gets focus in blue and
starts to type the value of that property.

Sorry, if i got wrong,

Hope this helps,

Onur Güzel
Derek Hart - 29 Sep 2008 14:49 GMT
Not sure I understand how this will solve the problem. In Visual Studio, if
I design a text box, then highlight it and hit a keyboard character, it will
set focus to the property grid, and enter that character in the "text"
property waiting for more input. Can I recreate this somehow?

On Sep 29, 1:17 am, "Derek Hart" <derekmh...@yahoo.com> wrote:
> Not quite. When I am in Visual Studio designing a form, and I highlight a
> text box, when I then hit a letter, such as "T", it moves the cursor to
[quoted text clipped - 83 lines]
>
> Onur Güzel

Now got it what you desribe in VS. But couldn't associate your aim
with a textbox and typing in a defaul property of a propertygrid
control. For example, you can make a property default by using
"DefaultPropertyAttribute" in your class, for example you can design
your class whose default property is "Title" as follows:

<DefaultPropertyAttribute("Title")> _
Public Class SampleProperty

   Private _Title As String

   <CategoryAttribute("Application"), _
      Browsable(True), _
      [ReadOnly](False), _
      BindableAttribute(False), _
      DefaultValueAttribute(""), _
      DesignOnly(False), _
      DescriptionAttribute("Enter Title for the application")> _
      Public Property Title() As String
       Get
           Return _Title
       End Get
       Set(ByVal Value As String)
           _Title = Value
       End Set
   End Property

Now, when you associate that class with PropertyGrid using:
"PropertyGrid1.SelectedObject = New SampleProperty" preferably in
form1_load event, "Title" property is pre-selected in gray and when
you type in a textbox using the code above, it gets focus in blue and
starts to type the value of that property.

Sorry, if i got wrong,

Hope this helps,

Onur Güzel
Jeff Johnson - 02 Oct 2008 15:44 GMT
> Not sure I understand how this will solve the problem. In Visual Studio,
> if I design a text box, then highlight it and hit a keyboard character, it
> will set focus to the property grid, and enter that character in the
> "text" property waiting for more input. Can I recreate this somehow?

Remember that the PropertyGrid has an object assigned to it that serves as
the source of the data it displays. I think what you need to do is alter
that object so that your desired property now contains the character that
was typed and then set your focus to the PropertyGrid and the property.
atalanta - 03 Oct 2008 19:10 GMT
Sounds like you want to use a macro in VS.

> Not sure I understand how this will solve the problem. In Visual Studio, if
> I design a text box, then highlight it and hit a keyboard character, it will
> set focus to the property grid, and enter that character in the "text"
> property waiting for more input. Can I recreate this somehow?
Derek Hart - 04 Oct 2008 17:25 GMT
Thanks for the different information. Just can't get it working.  If I have
a textbox highlighted (remember, I am in runtime mode with custom code that
draws a rectangle around the textbox), then I hit a keystroke, it does set
focus to the property grid, and sets focus to the property.

Now I tried this code:
CType(propGrid.SelectedObject, PropertiesLabel).LabelName =
e.KeyData.ToString
propGrid.Refresh

So now when I hit a keystroke, it does fill in the first character into the
grid. But here is the tricky part. It does not open the property up for
editing. It sets focus to the property. Now the user hits another keystroke
and it types over the first one.  Is is possible after the Refresh is done,
to open up the property for editing, and be in the second character
position?

> Sounds like you want to use a macro in VS.
>
[quoted text clipped - 4 lines]
>> set focus to the property grid, and enter that character in the "text"
>> property waiting for more input. Can I recreate this somehow?
Jeff Johnson - 06 Oct 2008 14:33 GMT
> Thanks for the different information. Just can't get it working.  If I
> have a textbox highlighted (remember, I am in runtime mode with custom
[quoted text clipped - 12 lines]
> Refresh is done, to open up the property for editing, and be in the second
> character position?

At this point you might have to dig into P/Invoke and just send a keystroke
to the property grid with the key_event() API function. If you look at the
PropertyGrid class in Reflector you find that there's a bunch of internal
and private stuff supporting its functionality, and I doubt you'll be able
to access them through the Framework. (Maybe if you derive from the grid?
But I doubt it....)

Free Magazines

Get these publications absolutely FREE for up to 12 months. There are no hidden fees and no obligation. Simply choose a title, complete the application form and submit it. Read more ...

Oracle MagazineNetwork ComputingComputer WorldBio-IT WorldeWeekInformation WeekInfosecurity
 
Sign In
Join
My Latest Posts
My Monitored Threads
My Blog
My Photo Gallery
My Profile
My Homepage

Start New Thread
Enable EMail Alerts
Rate this Thread



©2008 Advenet LLC   Privacy Policy - Terms of Use
This website includes both content owned or controlled by Advenet as well as content owned or controlled by third parties.