YD4*_*YD4 0 c# attributes properties conditional-operator winforms
我想显示MyProperty1或MyProperty2基于MyPropertySelected.如何使用条件语句if或else基于MyPropertySelected?谢谢.
// [Browsable(true)
// ????? conditional statement IF ELSE in here..
// IF (MyPropertySelected) MyProperty1 will be show ELSE MyProperty2 will be show.
public bool MyPropertySelected { get; set; }
// [Browsable(true) or [Browsable(false) depending on MyPropertySelected condition.
public int MyProperty1 { get; set; }
// [Browsable(true) or [Browsable(false) depending on MyPropertySelected condition.
public int MyProperty2 { get; set; }
Run Code Online (Sandbox Code Playgroud)
你把苹果与橘子混淆了.
属性是元数据,属性值在运行时获取其值.
换句话说:属性是你可以使用反射访问的东西,它们不是绑定到特定对象而是绑定到对象的类型(即类).
另一个问题是您希望根据在编译时无法工作的条件向属性添加属性.
你MyPropertySelected直到它包围类实例化得到不会得到任何价值-那就是创建一个对象,例如:MyClass a = new MyClass()- ,这意味着添加或不添加属性将永远是一个编译时的选择.
我想明确一点:你不能做你想要纯粹使用属性的东西!
您无法根据运行时值有条件地应用属性.
最后,我怀疑你想Browsable根据条件制作一些东西,就像你自己的问题所说的那样.你不能这样做.
您可以使用不同的软件设计解决您的问题.
首先,创建一个具有任何可浏览属性的接口.但是不要将该属性[Browsable(bool)]应用于接口属性.
创建两个实现先前创建的接口的类.
在第一个类中,实现接口属性并[Browsable(true)]在其上放置属性.在第二节课中,做同样的事情,但这次放在[Browsable(false)]他们身上.
创建对象实例的一些代码将决定将实例化哪一个.
也就是说,MyPropertySelected在两个类之外进行外部化并在调用者中执行整个条件切换.
public interface IBrowsableProperties
{
int Property1 { get;set; }
int Property2 { get;set; }
}
public class A : IBrowsableProperties
{
[Browsable(true)]
public int Property1 { get;set; }
[Browsable(true)]
public int Property1 { get;set; }
}
public class B : IBrowsableProperties
{
[Browsable(false)]
public int Property1 { get;set; }
[Browsable(false)]
public int Property1 { get;set; }
}
// Somewhere in some method...
bool propertySelected = true;
IBrowsableProperties instance = null;
if(propertySelected)
{
instance = new A();
}
else
{
instance = new B();
}
// ... do stuff with your instance of IBrowsableProperties!
Run Code Online (Sandbox Code Playgroud)
我已经回顾了你的一些问题的评论,我发现你正在使用PropertyGrid控制.
无论如何,您可以在您的案例中应用这个概念.PropertyGrid可以继承.您可以创建PropertyGrid1和PropertyGrid2派生类都实现所提出的界面!
| 归档时间: |
|
| 查看次数: |
9026 次 |
| 最近记录: |