.NET Forum / Windows Forms / WinForm Controls / October 2008
Set Focus To Specific Property In Property Grid
|
|
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 MagazinesGet 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 ...
|
|
|