【问题标题】:How do you access a form's controls using MVP如何使用 MVP 访问表单的控件
【发布时间】:2013-10-30 18:09:34
【问题描述】:

希望这张图片在这里可以阅读...

这是我实施 MVP 的第一个项目。我有三个班。我的主要表单,恰当地命名为FrmMainFrmMainPresenter,然后是MainOps,其中有一些额外的东西。

FrmMain 上,我有对FrmMainPresenter 的引用,在FrmMainPresenter 上我有对FrmMain 的引用。

FrmMain 上的事件调用FrmMainPresenter 上的方法。

FrmMainPresenter 应该FrmMain 引用中获取一个控件,并在MainOps 上调用一个接受GridControlCollection<Control> 的方法。

但是,在尝试访问 FrmMainPresenter 中的适当 Grid 和 Collection 时,它告诉我 FrmMain 不包含这些控件的定义

FrmMain上的代码:

    private void genericCheckbox_CheckedChanged(object sender, EventArgs e)
    {
        _presenter.CheckBoxCheckedChanged();
    }

FrmMainPresenter上的代码:

    public void CheckBoxCheckedChanged()
    {
        if (!_view.SuppressCheckedChanged)
            _mo.UpdateFilter(_view.gdcSVNDefaultView, _view.Controls);
    }

不知道我做错了什么。我不认为这是正确的,但我唯一的猜测是在 Designer 文件中将必要的控件设置为 public,但这不起作用。结果相同。

我想问题是因为我的表单界面没有定义 gridview / controls 集合,我的演示者类看不到它。但即便如此,我也不确定如何在界面中正确定义它,以便可以在表单上实现它。

【问题讨论】:

  • 您的问题是您的代码没有编译,还是在运行时抛出异常(如果是,异常及其堆栈跟踪说明了什么)。
  • 如果您使用接口,请声明一个返回所需控件的方法。在你实现接口的类中,你也实现了这个方法。 (或者,您可以在接口中声明一个带有 getter 的属性,而不是使用方法。)

标签: c# winforms .net-3.5 mvp


【解决方案1】:

您可以通过设计器属性将FrmMain 中的Control 公开,或者将公开的getter 添加到FrmMain 代码中,然后FrmMainPresenter 可以访问。

可能还有另外六种方法可以最终实现,但这些可能是实现目标的两种最常见和最简单的方法。

【讨论】:

  • 嗯,这确实有效。将 Getters 定义添加到我的接口中,然后在类中实现实际方法。我会等待其他答案,然后可能标记为正确。
  • @Sab699,我认为这就是答案 :) 我在 cmets 中说了同样的效果(还没有注意到这个答案)。
猜你喜欢
  • 1970-01-01
  • 2011-06-16
  • 1970-01-01
  • 2010-12-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多