PropertyGrid不更新所选对象

时间:2016-03-18 14:32:29

标签: c# propertygrid

我想实现一个简单的功能,用户可以自定义Font标签。

所以我的FontEditor形式包含以下代码:

public partial class FontEditor : Form
{
    public Font myFont;

    public FontEditor(Font myFont)
    {
        InitializeComponent();

        this.myFont = myFont;

        propertyGrid1.SelectedObject = this.myFont;
    }

    private void FontEditor_FormClosing(object sender, FormClosingEventArgs e)
    {
        DialogResult = DialogResult.OK;
    }
}

我在这样的图表控件上使用它:

using (FontEditor fe = new FontEditor(chart1.Titles[0].Font))
{
    if (DialogResult.OK == fe.ShowDialog())
    {
        chart1.Titles[0].Font = fe.myFont;
    }
}

加载字体编辑器时,我可以看到以下内容:

enter image description here

如果我将Size18更改为10并关闭窗口,SelectedObject(我的图表标题中的字体对象)似乎不是改变/更新:

enter image description here

不编辑属性网格值应该更新SelectedObject

1 个答案:

答案 0 :(得分:0)

好的,我意识到这个愚蠢的错误。您在PropertyGrid上执行的修改实际上位于propertyGrid1.SelectedObject

这就是我修复它的方法:

FontEditor.cs

public partial class FontEditor : Form
{
    public FontEditor(Font myFont)
    {
        InitializeComponent();

        propertyGrid1.SelectedObject = myFont;
    }

    private void FontEditor_FormClosing(object sender, FormClosingEventArgs e)
    {
        DialogResult = DialogResult.OK;
    }

    public Font UpdatedFont
    {
        get { return propertyGrid1.SelectedObject as Font; }
    }
}

用法

using (FontEditor fe = new FontEditor(chart1.Titles[0].Font))
{
    if (DialogResult.OK == fe.ShowDialog())
    {
        chart1.Titles[0].Font = fe.UpdatedFont;
    }
}

这现在有效。