你如何在物业网格中有一个按钮?

时间:2011-06-29 18:46:05

标签: c# .net winforms user-interface propertygrid

我有一个属性网格,它会引用一些属性。我想让属性网格中的一个项目成为一个按钮,或者甚至有一个椭圆形按钮,它就像一个普通胜利形式的按钮。

有办法做到这一点吗?

提前感谢您的帮助!

3 个答案:

答案 0 :(得分:7)

我建议阅读Getting the Most Out of the .NET Framework PropertyGrid Control

介绍如何为您的财产create a custom UI,其中可能包含一个打开弹出/单独表单/等的按钮。

答案 1 :(得分:1)

UITypeEditor,使用IWindowsFormsEditorService ......就是这样。得到它了!谢谢你的指导!

答案 2 :(得分:1)

我添加了全部折叠,并使用扩展方法将所有按钮展开到PropertyGrid。

PropertyGrid Buttons

namespace MyNameSpace
{

    public static class PropertyGridHelper
    {

        private static PropertyGrid getPropertyGridParent(object sender)
        {
            PropertyGrid propertyGrid = null;
            ToolStripButton toolStripButton = sender as ToolStripButton;

            // ToolStripButton -> ToolStrip -> PropertyGrid
            if (toolStripButton != null)
            {
                ToolStrip toolStrip = toolStripButton.GetCurrentParent() as ToolStrip;

                if (toolStrip != null)
                {
                    propertyGrid = toolStrip.Parent as PropertyGrid;

                    if (propertyGrid != null)
                    {
                        propertyGrid.CollapseAllGridItems();
                    }
                }
            }  
            return propertyGrid;
        }

        private static void propertyGridCollapseAllClick(object sender, EventArgs e)
        {
            PropertyGrid propertyGrid = getPropertyGridParent(sender);

            if (propertyGrid != null)
            {
                propertyGrid.CollapseAllGridItems();
            }         
        }

        private static void propertyGridExpandAllClick(object sender, EventArgs e)
        {
            PropertyGrid propertyGrid = getPropertyGridParent(sender);

            if (propertyGrid != null)
            {
                propertyGrid.ExpandAllGridItems();
            }
        }

        public static void AddCollapseExpandAllButtons(this System.Windows.Forms.PropertyGrid propertyGrid)
        {

            foreach (Control control in propertyGrid.Controls)
            {
                ToolStrip toolStrip = control as ToolStrip;

                if (toolStrip != null)
                {
                    toolStrip.Items.Add(new ToolStripButton("", Properties.Resources.CollapseAll, propertyGridCollapseAllClick));
                    toolStrip.Items.Add(new ToolStripButton("", Properties.Resources.ExpandAll, propertyGridExpandAllClick));
                }
            }
        }
     }
 }