我有一个组件,我正在构建一个编辑器。此组件执行的操作之一是允许将我自己类型的其他控件绑定到此组件。
编辑器检测到所有这些控件,编辑器将允许我批量编辑此绑定。
但是,如果在我打开编辑器时当前保存了表单文件,那么当我回到普通表单设计器中时,更改这些属性可以让我看到这些控件的更改,但文件仍然是标记为“未修改”,因此不会保存任何更改。
我需要在组件编辑器中做些什么才能告诉设计师发生了什么事?
这是一个简单的标志或方法调用,还是我需要一个更大的教程?
让我试着更好地解释一下。
我将一个组件放在一个表单上,它位于它下面的灰色区域,在该组件上我有一个属性,它有自己的属性编辑器。这很有效。
当我调用属性编辑器时,它会弹出一个表单,在这个表单中,我列出了组件被放在同一表单上的所有其他控件。这意味着如果我在该表单上有一个文本框和一个组合框,它们会显示在我调用属性编辑器时打开的对话框中。这也有效。
如果我的属性编辑器表单更改了该文本框或组合框的任何属性,让我们说它会更改.Text属性,然后通过关闭属性编辑器返回到我的表单,我可以检查文本框和组合框并看到.Text属性确实发生了变化。
但是,这就是问题,文件未标记为已修改。这意味着如果我点击F5,调试器将在没有重建的情况下启动,如果我关闭并重新打开表单,则属性将恢复为上次保存的值。
我将从其中一个答案中查看OnComponentChange方法,看看是否可以解决这个问题。
答案 0 :(得分:1)
据我所知,你的问题......
您应该能够使用OnComponentChanging and OnComponentChange事务处理有关属性值更改的设计器通知。如果调用SetValue,则会自动调用这些方法:
TypeDescriptor.GetProperties(theComponent).Find(
theName, True).SetValue(theComponent, theNewValue);
也可以手动提升OnComponentChange通知,告诉设计人员发生了某些事情并且已经发生了变化。