我有一个关于将参数传递给基本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时,我需要获取继承的表单值。我该怎么办?
答案 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();
}
}