如何将Windows窗体数据传递到基本窗体

时间:2018-11-30 09:31:31

标签: c# winforms

我有一个关于将参数传递给基本Winform的问题。

因此,我有一个包含保存,删除和更新按钮的基本表单,其他表单将从该表单继承。

通用对象根据表单类型进行更改。我可以,但是如何将数据从表单传递到基本表单?

这是基本表单的代码。

public partial class BaseForm : Form, BaseInterface
{
    public object genericItem;


    public BaseForm()
    {
        InitializeComponent();
    }

    public void Add()
    {
        var a = genericItem.ToXml();

        MessageBox.Show(a);
    }

    public void Delete(int id)
    {
        throw new NotImplementedException();
    }

    public void Update(string xml)
    {
        throw new NotImplementedException();
    }

    public void button1_Click(object sender, EventArgs e)
    {
        Add();
    }
}

这是从基本表单继承的表单

public partial class Definitions : BaseForm
{
    public Definitions() : base()
    {
        InitializeComponent();

    }
}

当我单击按钮1时,我需要获取继承的表单值。我该怎么办?

2 个答案:

答案 0 :(得分:0)

您可以使用抽象方法将基类更改为抽象方法,该方法必须在派生类中实现(注释代码未经测试,仅作为示例):

public abstract partial class BaseForm : Form, BaseInterface
{
    public object genericItem;

    public BaseForm()
    {
        InitializeComponent();
    }

    public void Add()
    {
        var a = genericItem.ToXml();
        MessageBox.Show(a);
    }

    public abstract object GatherData();

    public void button1_Click(object sender, EventArgs e)
    {
        genericItem = GatherData();
        Add();
    }
}

public partial class Definitions : BaseForm
{
    public Definitions() : base()
    {
        InitializeComponent();
    }

    public override object GatherData()
    {
        return new SomeKindOfData();
    }
}

答案 1 :(得分:0)

我不会使用抽象类,因为Visual Studio不能真正设计它们(据我所知)。相反,可以考虑在基类中使用虚拟属性并对其进行抛出操作,从而迫使任何扩展该类的人都可以实现该方法。 这就是问题:这种方法无疑是最简单的方法,但是如果您打算在将来或在大规模环境中大量重复使用此代码,则可能最麻烦。下面是此解决方案的示例。

public partial class BaseForm : Form, BaseInterface
{
    public object genericItem;

    // this can be overridden in extending classes
    virtual int SomeDataHere => throw new NotImplementedException();

    public BaseForm()
    {
        InitializeComponent();
    }

    public void Add()
    {
        var a = genericItem.ToXml();

        MessageBox.Show(a);
    }

    public void Delete(int id)
    {
        throw new NotImplementedException();
    }

    public void Update(string xml)
    {
        throw new NotImplementedException();
    }

    public void button1_Click(object sender, EventArgs e)
    {
        MessageBox.Show(SomeDataHere);
        Add();
    }
}