Auto suggestion box in Grid

8 posts, 0 answers
  1. Kaven
    Kaven avatar
    5 posts
    Member since:
    Oct 2012

    Posted 25 Oct 2012 Link to this post

    Hello,

    We currently have a field of our class that is the list of possible Texture that we can assign to a Sprite. It is a collection received by our Converter
    class TextureConverter : ResourceConverter
        {
            public override StandardValuesCollection GetStandardValues(ITypeDescriptorContext context)
            {
                Type[] tType = new Type[] { typeof(Texture), typeof(TextureAtlas) };
                string[] tResource = ProjectManager.Singleton.CurrentProject.GetResourceNameListForType(tType, false);
                return new StandardValuesCollection(tResource);
            }
        }
    And our class member goes like this:
    [Category("Settings Sprite")]
            [DisplayName("Texture")]
            [Description("Current Texture")]
            [TypeConverter(typeof(TextureConverter))]
            public virtual string Texture
            {
                get
                {
                    return mTextureCBValues;
                }
                set
                {
                    if (mTextureCBValues != value)
                    {
                        if (value == "")
                        {
                            ResetTexture();
                        }
                        else
                        {
                            Item tTex = ProjectManager.Singleton.CurrentProject.GetResourceByName(value, true, Name);
                            if (tTex is Texture)
                            {
                                mTextureCBValues = value;
                                SetTexture(tTex as Texture);
                            }
                            else if (tTex is TextureAtlas)
                            {
                                mTextureCBValues = value;
                                SetTextureAtlas(tTex as TextureAtlas);
                            }
                            else
                            {
                                SetStatus(Item.StatusState.ERROR, "Texture " + value + " is not found or invalid");
                                ResetTexture();
                            }
                        }
     
                        Refresh();
                        NotifyPropertyChanged();
                    }
                }
            }

    How is it possible to make that field so we can "search" (auto-suggestion) for the texture name we want?

    Kaven
  2. Ivan Petrov
    Admin
    Ivan Petrov avatar
    701 posts

    Posted 29 Oct 2012 Link to this post

    Hello Kaven,

    Thank you for writing.

    RadPropertyGrid supports custom type converters and takes into account the standard values collection. To get this feature working you have to also override the GetStandardValuesSupported method, which is used to determine whether there are standard values or not. After you override it you will see that the property will be edited using a drop down editor which contains the standard values. You can enable the user to type in the drop down by subscribing to the EditorInitialized event and adding the following code to the event handler:
    private void radPropertyGrid1_EditorInitialized(object sender, PropertyGridItemEditorInitializedEventArgs e)
    {
      if (e.Item.Name == "Texture")
      {
        PropertyGridDropDownListEditor editor = e.Editor as PropertyGridDropDownListEditor;
        BaseDropDownListEditorElement element = editor.EditorElement as BaseDropDownListEditorElement;
     
        element.DropDownStyle = RadDropDownStyle.DropDown;
        element.AutoCompleteMode = AutoCompleteMode.SuggestAppend;
      }  
    }

    I hope this will be useful. Should you have further questions, I would be glad to help.
     
    Greetings,
    Ivan Petrov
    the Telerik team
    Q3’11 of RadControls for WinForms is available for download (see what's new). Get it today.
  3. UI for WinForms is Visual Studio 2017 Ready
  4. Kaven
    Kaven avatar
    5 posts
    Member since:
    Oct 2012

    Posted 29 Oct 2012 Link to this post

    Thanks!

    Is there a way to let it suggest us the words that contains what we are typing and not only the one that begin with? Must we always change the DataSource each time a letter is typed?

    On an other note, when we switched from PropertyGrid to RadPropertyGrid, we lost the Grouping and even if I set the EnableGrouping and/or EnableCustomGrouping to true.

    Our class member are set up like this
    [Category("Settings Sprite")]
    [DisplayName("Texture")]
    [Description("Current Texture")]
    [TypeConverter(typeof(TextureConverter))]

    Kaven
  5. Ivan Petrov
    Admin
    Ivan Petrov avatar
    701 posts

    Posted 01 Nov 2012 Link to this post

    Hi Kaven,

    Thank you for writing back.

    You can get this functionality by altering a bit the example from my previous post. Here is the new code:
    private void radPropertyGrid1_EditorInitialized(object sender, Telerik.WinControls.UI.PropertyGridItemEditorInitializedEventArgs e)
    {
      if (e.Item.Name == "Texture")
      {
        PropertyGridDropDownListEditor editor = e.Editor as PropertyGridDropDownListEditor;
        BaseDropDownListEditorElement element = editor.EditorElement as BaseDropDownListEditorElement;
     
        element.DropDownStyle = RadDropDownStyle.DropDown;
        element.AutoCompleteMode = AutoCompleteMode.Suggest;
        element.AutoCompleteSuggest.SuggestMode = SuggestMode.Contains;
      
    }
    On the grouping functionality, the properties you have set control whether grouping and custom grouping are allowed as an operation. These properties do not perform an actual grouping. To change the grouping you can use the PropertySort property. It allows you to sort and/or group properties.

    I hope this will help. 
     
    Greetings,
    Ivan Petrov
    the Telerik team
    Q3’11 of RadControls for WinForms is available for download (see what's new). Get it today.
  6. Kaven
    Kaven avatar
    5 posts
    Member since:
    Oct 2012

    Posted 01 Nov 2012 Link to this post

    Thanks for your reply.

    I played a lot with PropertySort as it seemed the obvious thing but the only thing it does right now is that every property are seperated instead of actually being grouped. When the PropertySort is AlphabeticalCategorized,it looks like the image I attached when my code is this
    [Category("Settings Font Creation")]
    [DisplayName("Italic")]
    [Description("Italic")]
    public bool Italic
    {
        get
        {
            return mItalic;
        }
        set
        {
            if (mItalic != value)
            {
                mItalic = value;
                Generate();
                UpdateFontChanges();
                NotifyPropertyChanged();
            }
        }
    }
     
    [Category("Settings Font Creation")]
    [DisplayName("Font Name")]
    [Description("Font Name")]
    [ReadOnly(true)]
    public String FontName
    {
        get
        {
            return mFontName;
        }
        set
        {
            if (mFontName != value)
            {
                mFontName = value;
                Generate();
                UpdateFontChanges();
                NotifyPropertyChanged();
            }
        }
    }
     
    [Category("Settings Font Creation")]
    [DisplayName("Font Outline")]
    [Description("Font Outline")]
    public byte Outline
    {
        get
        {
            return mOutline;
        }
        set
        {
            if (mOutline != value)
            {
                mOutline = value;
                if (Generate() < 0)
                {
                    // An Error occured
                    MessageBox.Show("Bad value, No font generated!", "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
                }
                UpdateFontChanges();
                NotifyPropertyChanged();
            }
        }
    }
     
    [Category("Settings Font Creation")]
    [DisplayName("Border Width")]
    [Description("Border Width")]
    public byte BorderWidth
    {
        get
        {
            return mBorderWidth;
        }
        set
        {
            if (mBorderWidth != value)
            {
                mBorderWidth = value;
                Generate();
                UpdateFontChanges();
                NotifyPropertyChanged();
            }
        }
    }
     
    [Category("Settings Font Creation")]
    [DisplayName("Exported Char")]
    [Description("Exported Char")]
    public String ExportChar
    {
        get
        {
            return mExportChar;
        }
        set
        {
            if (mExportChar != value)
            {
                mExportChar = value;
                Generate();
                UpdateFontChanges();
                NotifyPropertyChanged();
            }
        }
    }
     
    [Category("Settings Font Creation")]
    [DisplayName("Font Color")]
    [Description("Font Color")]
    public Color FontColor
    {
        get
        {
            return mFontColor;
        }
        set
        {
            if (mFontColor != value)
            {
                mFontColor = value;
                UpdateFontChanges();
                NotifyPropertyChanged();
            }
        }
    }
     
    [Category("Settings Font Creation")]
    [DisplayName("Optimized Texture Size")]
    [Description("Optimized Texture Size")]
    public Size FontTextureSize
    {
        get
        {
            return new Size(mTextureWidth, mTextureHeight);
        }
    }
     
    [Browsable(false)]
    public bool IsOptimizeMode
    {
        get
        {
            return mIsOptimizeMode;
        }
        set
        {
            mIsOptimizeMode = value;
        }
    }

    I'm wondering why this use to work perfectly with the PropertyGrid.

    Kaven
  7. Kaven
    Kaven avatar
    5 posts
    Member since:
    Oct 2012

    Posted 01 Nov 2012 Link to this post

    Ok. I got it working. Seems like we just need EnableGrouping enabled and not EnableCustomGrouping. I guess I turned them both on during my tests.

    Thanks for your help. It is much appreciated.
  8. ishara
    ishara avatar
    4 posts
    Member since:
    Jun 2011

    Posted 16 Nov 2012 Link to this post

    HI,

    is there any way that i can use Autocomplete with PropertyGridTextBoxEditor ?

    Thanks ,
    Ishara
  9. Ivan Petrov
    Admin
    Ivan Petrov avatar
    701 posts

    Posted 20 Nov 2012 Link to this post

    Hello Ishara,

    Your question was already answered in the other thread you have opened. Please see our answer there for more information.

    We would like to kindly ask you to use just one support channel to contact us. Posting the same question more than once slows down our response time because we will need to review and address two or more threads instead of one. Furthermore, please have in mind that support threads are handled according to the license type and time of posting, so if it is an urgent issue, we suggest that you use a support ticket, which would be handled before a forum thread.
     
    Regards,
    Ivan Petrov
    the Telerik team
    Q3’12 of RadControls for WinForms is available for download (see what's new). Get it today.
Back to Top
UI for WinForms is Visual Studio 2017 Ready