如何用UI映射对象
本文关键字:对象 映射 UI 何用 | 更新日期: 2023-09-27 18:02:19
我有以下类实现(不完整,只是给一个想法)
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项。考虑一下,我有win form应用程序,其中开关和LED是两个面板,我希望GDI绘制它。
问题是什么是最好的方式同步对象与UI元素。选项:创建继承panel的UI元素,并且应该包含一个
创建继承自BO的UI元素(比如LEDUI)包含容器(面板)绘制,并使用此实现绘制方法。颜色(例如LED) -这将导致文件计数2* BO
保持UI元素和BO分离,让presenter成为桥梁他们之间。
实现BO本身在winform上渲染(假设单一UI)的方法。自它不能直接添加到winform,所以创建一个
CustomForm
对象,该对象允许添加这些元素(假设IMyObj
),以及调用CustomFOrm.Render()
,最终调用的渲染方法所有childElements。
编辑
我的错误,可能有许多LED和开关。每个开关可连接多个LED。此外,我创建的类是独立于UI的。我不期望如何找到控件和发光的解决方案,但如果你给这些类并告诉你制作一个winform应用程序,假设你将最少接触类以及编写最少的代码,以及以下标准的UI开发方式,最好的方法是什么
我一直被教导引用在继承之前,如果你不需要访问某个类的受保护成员,你最好在你的类中创建一个该类型的对象,而不是继承整个类(如果我错了,请纠正我)。
在c#(好吧,WinForms)中,每个UI元素都有一个Tag
成员,您可以将您想要的任何内容放入其中。因此,当用户按下'switch'时,代码可以遍历控件,寻找具有与当前选择匹配的Tag
的控件。
例如,假设LED图像在其Tag
字段中有文本'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);
}
}