Как передать данные формы Windows в базовую форму - PullRequest
0 голосов
/ 30 ноября 2018

У меня есть вопрос о параметрах передачи в базовую 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 голосов
/ 30 ноября 2018

Я бы не использовал абстрактный класс только потому, что 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();
    }
}
0 голосов
/ 30 ноября 2018

Вы можете изменить свой базовый класс на абстрактный с помощью абстрактного метода, который должен быть реализован в производном классе (обратите внимание, код не тестировался, просто и пример):

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();
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...