gpt4 book ai didi

c# - 实现的 UITypeEditor 不会触发属性集

转载 作者:太空狗 更新时间:2023-10-29 21:51:49 26 4
gpt4 key购买 nike

我有一个属性网格,当单击其中一个属性的按钮时,某些字段会被填充。但是属性的集合不会被触发。我不知道为什么。

 private OptoSigmaSettings dataToGet = new OptoSigmaSettings();

[Editor(typeof(OptoSetupFormEditor), typeof(UITypeEditor))]
[TypeConverter(typeof(ExpandableObjectConverter))]
[Category("Setup")]
public OptoSigmaSettings DataToGet
{
get { return dataToGet; }
set
{
MessageBox.Show("Im here"); //This isnt happening.
dataToGet = value; }
}

[Serializable]
public class OptoSigmaSettings
{
private int duration = 0;
private string direction = "Positive";
private string functionToCall = "Home";

public string FunctionToCall
{
get { return functionToCall; }
set { functionToCall = value; }
}

public int Duration
{
get { return duration; }
set { duration = value; }
}
public string Direction
{
get { return direction; }
set { direction = value; }
}
}

public class OptoSetupFormEditor : UITypeEditor
{
public override UITypeEditorEditStyle GetEditStyle(ITypeDescriptorContext context)
{
return UITypeEditorEditStyle.Modal;
}

public override object EditValue(ITypeDescriptorContext context, System.IServiceProvider provider, object value)
{
IWindowsFormsEditorService service = provider.GetService(typeof(IWindowsFormsEditorService)) as IWindowsFormsEditorService;
OptoSigmaSettings opto = value as OptoSigmaSettings;

if (service != null && opto != null)
{
using (OptoSigmaSetup form = new OptoSigmaSetup())
{
DialogResult result;
result = service.ShowDialog(form);

if (result == DialogResult.OK)
{

opto.Direction = form.Direction;
opto.FunctionToCall = form.FunctionToCall;
opto.Duration = form.Duration;

}
}
}
return opto;
}
}

这是一个使用标准属性网格的 WinForms 应用。

最佳答案

问题是您的编辑器返回完全相同的引用(您获得 opto 并返回 opto)。所以即使你修改了opto的一些内部属性,opto ref也不会改变。如果您绝对需要进入您的设置访问器,请在 EditValue 内部创建一个新的 OptoSigmaSettings 并使用您的表单返回的内容修改其属性。请注意,我在您的代码中看不到如何使用现有 opto 的内容初始化表单。

PS:刚刚看到你上面的评论。请注意,如果您没有初始化 dataToGet,那么它就是 null,这就是它第一次工作的原因(null 与您的表单返回的值不同)。

注意 2:Marino 说得对,即使您的集合未被调用,对象的属性仍会更新(Direction、FunctionToCall 和 Duration)。

关于c# - 实现的 UITypeEditor 不会触发属性集,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6538293/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com