C# 如何使用UI映射对象
我有下面的类实现不完整,只是给一个想法C# 如何使用UI映射对象,c#,user-interface,class-design,C#,User Interface,Class Design,我有下面的类实现不完整,只是给一个想法 public class MySwitch{ Command command = Command.Red; public Command GetNext() { command = GetNext(command); // circular enum values return command; } } public enum Command
public class MySwitch{
Command command = Command.Red;
public Command GetNext() {
command = GetNext(command); // circular enum values
return command;
}
}
public enum Command { Red =0, Blue=1, Green=2}
public class LED {
public void Glow(Command command){
this.setColor(ColorForm(command));
this.Glow();
}
}
public class Commander {
public Commander(LED target, MySwitch source){
this.LED = LED;
this.MySwitch = MySwitch;
}
public void Execute(){
this.LED.Glow(this.MySwitch.GetNext());
}
}
我希望这些对象映射到UI项。考虑一下,我已经赢了表单应用程序,其中开关和LED是两个面板,我希望GDI绘制它。p>
问题是什么是将对象与UI元素同步的最佳方式。选项包括:
创建随面板继承的UI元素,并应包含一个
对象的实例
创建UI元素,表示从BO继承的LEDUI,并且应该
包含用于绘制的容器面板,并使用此.Color实现绘制方法
例如LED-这将导致文件协商2*BO
将UI元素和BO分开,让演示者成为桥梁
在他们之间
在BO本身上实现方法,以在winform上呈现单一UI。自从
它不能直接添加到winform,因此请创建一个CustomForm
对象,该对象允许添加此类元素,并且
调用CustomFOrm.Render,它最终调用
所有子元素。表单和控件的呈现方式非常相似
还有别的办法吗
在我看来,第二点是更好的方法。请说明将BO映射到UI的不同方式的优缺点,以及如何同步它们。游戏开发者可能会有更好的理解
编辑
我的错误是,可能有很多LED和开关。每个开关可连接到多个LED。我创建的类也独立于UI。我不希望找到如何找到控件和发光的解决方案,但如果给你这些类并告诉你制作一个winform应用程序,那么最好的实现方法是什么,假设你将最少接触这些类并编写最少的代码,除了遵循UI开发的标准方法之外,我一直被教导在继承之前先进行引用,如果不必访问某个类的受保护成员,最好在类中创建该类型的对象,而不是继承整个类。如果我错了,请纠正我
在这种情况下,选项3对我来说似乎是最好的。在C中,WinForms每个UI元素都有一个标记成员,您可以在其中放入任何您想要的内容。因此,当用户按下“开关”时,代码可以在控件上迭代,以查找具有与当前选择匹配的标记的控件 例如,假设LED图像的标记字段中有文本“LED=”,那么您可以编写一个函数来设置发光状态:
// example usage: SetGlow ("Red");
void SetGlow (string colour)
{
SetGlow (Controls, colour);
}
void SetGlow (ControlContainer controls, string colour)
{
foreach (Control control in controls)
{
if (control.Tag is a string) // syntax escapes me
{
string tag = (string) control.Tag;
if (tag.StartsWith ("LED="))
{
if (tag == ("LED=" + colour))
{
// enable glow
}
else
{
// disable glow
}
}
}
SetGlow (control.Controls, colour);
}
}