我有一个表单,我会做一些验证。当我实例化表单时,我将一个类作为参数传递,然后我可以更新该类的值。
Bussines _bussines = new Bussines ();
public frmUsuario(Bussines b)
{
_bussines = b;
InitializeComponent();
}
实例化表单
frmUsuario fUsuarios = new frmUsuario(this);
fUsuarios.ShowDialog();
所以,我的问题是:根据OOP,可以吗?对我来说似乎是懒惰的工作,但我不知道任何更容易的选择。有更好的选择吗?
对不起我的英语,这不是我的母语。
答案 0 :(得分:2)
更清洁,更间接的方式是使用界面。
IMO
但正如其他人巧妙地指出的那样,任何事情都可能是正确的,更多的是通过这样的限制不会在未来设置陷阱。
示例:
using System.Windows.Forms;
namespace WindowsFormsApplication1
{
public class Business
{
}
public interface IBusinessHandler
{
Business Business { get; set; }
void Execute();
}
public partial class Form1 : Form, IBusinessHandler
{
public Form1()
{
InitializeComponent();
}
#region IBusinessHandler Members
public Business Business { get; set; }
public void Execute()
{
// check that we can continue
if (Business == null)
{
MessageBox.Show("Business property not set");
// or whatever else appropriate
return;
}
// do some work on it
var s = Business.ToString();
MessageBox.Show("Work done !");
}
#endregion
}
internal class Demo
{
public Demo()
{
IBusinessHandler handler = new Form1();
handler.Business = new Business();
handler.Execute();
}
}
}
答案 1 :(得分:1)
答案是否定的,因为.NET代码需要表单的无参数构造函数。
想想你如何使用OpenFileDialog
。您创建一个实例,然后分配属性。同样如此。
{
Business item=new Business() { Name="Yoko" };
//
BusinessForm dlg=new BusinessForm();
dlg.Business=item;
if (dlg.ShowDialog()==DialogResult.OK)
{
item=dlg.Business;
}
}
使用表单代码
public class Business
{
public string Name { get; set; }
public bool IsOk { get { return !string.IsNullOrEmpty(Name); } }
}
public partial class BusinessForm : Form
{
Business business;
public BusinessForm()
{
InitializeComponent();
}
protected override void OnLoad(EventArgs e)
{
base.OnLoad(e);
this.business=new Business();
}
public Business Business
{
get { return business; }
set { business=value; }
}
public bool IsOk { get { return business.IsOk; } }
}