如何用UI映射对象



我有以下类实现(不完整,只是给一个想法)

   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元素。选项:
  1. 创建继承panel的UI元素,并且应该包含一个

  2. 创建继承自BO的UI元素(比如LEDUI)包含容器(面板)绘制,并使用此实现绘制方法。颜色(例如LED) -这将导致文件计数2* BO

  3. 保持UI元素和BO分离,让presenter成为桥梁他们之间。

  4. 实现BO本身在winform上渲染(假设单一UI)的方法。自它不能直接添加到winform,所以创建一个CustomForm对象,该对象允许添加这些元素(假设IMyObj),以及调用CustomFOrm.Render(),最终调用的渲染方法所有childElements。

在我看来,第二点是更好的方法。请建议不同的BO与UI映射方式的优缺点,以及如何同步。游戏开发者可能会有更好的理解

编辑

我的错误,可能有许多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);
  }
}

相关内容

  • 没有找到相关文章

最新更新