【发布时间】:2013-02-27 11:10:40
【问题描述】:
当用户在 PropertyGrid 中更改文本或布尔值时,我在事件处理程序中设置 flagModified=true;:
private void propertyGrid1_PropertyValueChanged(object s, PropertyValueChangedEventArgs e)
{
propertyGrid1.Refresh();
PropertyChanged(true);
}
然后保存按钮被启用。
我使用我的编辑器和表单(参见下面的课程)来编辑 Properrtygrid 中的值之一。它是我班的对象。 在编辑器中更改对象并关闭编辑器后,我将对象的值重新分配给新值(值 = frm.m_DS;)。一切正常,但有一刻:在这种情况下,PropertyValueChanged 没有被提升。 我使用 PropertyValueChanged 事件来启用我的按钮“保存”,它将所有属性保存到文件中。 如何捕获值更改的事件并启用“保存”按钮?。
public class DataProviderEditor : UITypeEditor
{
public override Object EditValue(
ITypeDescriptorContext context,
IServiceProvider provider,
Object value)
{
if ((context != null) && (provider != null))
{
IWindowsFormsEditorService svc =
(IWindowsFormsEditorService)
provider.GetService(typeof(IWindowsFormsEditorService));
if (svc != null)
{
using (DatasourceForm frm =
new DatasourceForm((MyDatasource)value))
{
if (svc.ShowDialog(frm) == DialogResult.OK)
{
value = frm.m_DS;
}
}
}
}
return base.EditValue(context, provider, value);
}
【问题讨论】:
-
但是当我使用我的编辑器作为对象时 - 你在这里是什么意思?能改一下吗?
-
它只能可靠地引发它自己编辑的值的事件,而不是它交给另一个编辑器的值。它没有比较 object 类型的值的管道。没有简单的解决方法。
-
我已经编辑了文本。
标签: c# propertygrid