gpt4 book ai didi

c# - 内部文本框的自定义控件属性

转载 作者:太空宇宙 更新时间:2023-11-03 13:52:17 25 4
gpt4 key购买 nike

考虑一个具有属性行的自定义控件:

private EMRow[] _rows;

public CustControl()
{
InitializeComponent();
}

public EMRow[] Rows
{
get
{
return _rows;
}
set
{
_rows = value;
}
}

每个 EMRow 创建一个 TextBox 并公开两个属性,一个用于文本,一个用于控件本身:

private TextBox _txtValue;

public EMRow()
{
if (_txtValue == null)
_txtValue = new TextBox();
}

public string Value
{
get
{
return _txtValue.Text;
}
set
{
_txtValue.Text = value;
}
}

public TextBox ValueTextBox
{
get
{
return _txtValue;
}
set
{
_txtValue = value;
}
}

如果您将此自定义控件放到窗体上并修改 Value 属性,它会更新 designer.cs 文件并将更改保存到文件中。

当您深入了解 ValueTextBox 属性(同样,所有这些都在 visual studio designer 中,而不是代码中)并修改属性时,更改不会保存到 designer.cs 文件中。就设计者而言,甚至没有创建和引用此属性的 TextBox 对象。

我确定这是“符合预期”的行为,但我不知道为什么。我在这里缺少 VS 设计器的基础知识吗?

最佳答案

经过一些挖掘我找到了这个问题的解决方案,告诉设计者通过添加 DesignerSerializationVisibility 属性来序列化这个对象本身

private TextBox _txtValue;

public EMRow()
{
if (_txtValue == null)
_txtValue = new TextBox();
}

public string Value
{
get
{
return _txtValue.Text;
}
set
{
_txtValue.Text = value;
}
}

[DesignerSerializationVisibility(DesignerSerializationVisibility.Content)]
public TextBox ValueTextBox
{
get
{
return _txtValue;
}
set
{
_txtValue = value;
}
}

Winforms Designer: Modify (and keep) properties in sub objects谢谢汉斯!

关于c# - 内部文本框的自定义控件属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13383378/

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