gpt4 book ai didi

C# 动态设计时属性

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

我想要一个控件,允许在另一个属性的值设置为特定值时显示一个属性。以下是我想要的一个非常简化的示例:

public class CustomButton : Control 
{
private ButtonType _bType = ButtonType.OnOff;
private Int32 _minPress = 50; // 50 mS

public ButtonType Button_Type
{
get { return _bType; }
set { _bType = value; }
}

public Int32 Minimum_Press_Time // Only for momentary buttons
{
get { return _minPress; }
set { _minPress = value; }
}

}
public enum ButtonType
{
Momentary,
OnOff
}

将 CustomButton 添加到 Windows.Forms 窗体时,如果 Button_Type 更改为 ButtonType.Momentary,Minimum_Press_Time 将仅显示在“属性”窗口中。

这样的事情可能吗?

最佳答案

是的,可以靠近但看起来有点奇怪。我以前在一些控件上做过这个。以下是您需要执行的操作的完整示例:

public partial class CustomButton : Control
{
private ButtonType _buttonType = ButtonType.OnOff;
private CustomButtonOptions _options = new OnOffButtonOptions();

[RefreshProperties(System.ComponentModel.RefreshProperties.All)]
public ButtonType ButtonType
{
get { return _buttonType; }
set
{
switch (value)
{
case DynamicPropertiesTest.ButtonType.Momentary:
_options = new MomentaryButtonOptions();
break;
default:
_options = new OnOffButtonOptions();
break;
}
_buttonType = value;
}
}

[TypeConverter(typeof(ExpandableObjectConverter))]
public CustomButtonOptions ButtonOptions
{
get { return _options; }
set { _options = value; }
}

public CustomButton()
{
InitializeComponent();
}
}

public enum ButtonType
{
Momentary,
OnOff
}

public abstract class CustomButtonOptions
{

}

public class MomentaryButtonOptions : CustomButtonOptions
{
public int Minimum_Press_Time { get; set; }

public override string ToString()
{
return Minimum_Press_Time.ToString();
}
}

public class OnOffButtonOptions : CustomButtonOptions
{
public override string ToString()
{
return "No Options";
}
}

基本上,您正在使用 ExpandableObjectConverter 将抽象类型转换为一组选项。然后使用 RefreshProperties 属性告诉属性网格它需要在此属性更改后刷新属性。

这是我发现的尽可能接近您要求的最简单方法。属性网格并不总是以正确的方式刷新,因此有时在没有可扩展属性的选项集旁边会有一个“+”号。在属性中使用“ToString”使属性网格上的显示看起来更智能。

关于C# 动态设计时属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29682014/

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