我通常在我的web項目中使用一個webform來添加和更新數據。我只是抓了winforms環境,所以我想用一種形式來添加和更新數據。一個winform添加和更新數據
我想對addEditForm使用兩個構造像
public AddEditForm()
{
.. to do new object
}
public AddEditForm(MyDataObj obj)
{
... to do edit
}
所以,這是正確的做法還是有更好的做法?
謝謝
我通常在我的web項目中使用一個webform來添加和更新數據。我只是抓了winforms環境,所以我想用一種形式來添加和更新數據。一個winform添加和更新數據
我想對addEditForm使用兩個構造像
public AddEditForm()
{
.. to do new object
}
public AddEditForm(MyDataObj obj)
{
... to do edit
}
所以,這是正確的做法還是有更好的做法?
謝謝
正如我在我的評論說我的時候我不使用MVP(使用這種方法太過,這當然是一個不同的故事)
關於調用InitializeComponent()你需要它在你的表單構造中,因爲它是(從你的名字可以知道)初始化你的表單和控件的方法它沒有它,你會得到一個空的表單。
但是如果您擔心調用的InitializeComponent()兩次,我更喜歡這樣的:
MyDataObj _myObject;
public AddEditForm()
{
InitializeComponent();
}
public AddEditForm(MyDataObj obj)
:this()
{
if(obj == null) //you're creating the object
_myObject = new MyDataObj();
else // you're editing it
_myObject = obj;
}
// Continue my work with _myObject
您發佈的方法是創建此類表單的常用方法。
但有時你會看到類似這樣的東西。
public AddEditForm(MyDataObj obj, int mode) //1 = edit, 2 = create
{
... to do edit
}
如果你考慮一下,這不是一個好的選擇。這很難理解,看起來很醜。
我需要調用的InitializeComponent()在每一個構造函數?
除非你做的構造函數鏈(這不會在這裏工作),是的,你這樣做。 請查看@Virus答案,以便只調用一次。
正確的做法是:
public partial class CustomerForm: Form
{
private object instance;
public CustomerForm()
{
InitializeComponent();
SetData(BLL.CreateNewEmptyObject());
}
public CustomerForm(object details)
: this()
{
SetData(details);
}
public void SetData(object details)
{
instance = details;
//bind the details to controls
}
private void Save()
{
BLL.Save(instance);
}
public bool EnableEdit {get{...
}
應用實例:
var newCustomerFrm = new CustomerForm();
var existingCustomerFrmReadOnly = new CustomerForm(BLL.GetCustomerById("123"))
{
EnableEdit = false
};
var existingCustomerFrmToEdit = new CustomerForm(BLL.GetCustomerById("123"))
{
EnableEdit = true
};
您可以通過以下方式創建不同的構造函數:
MyDataObj editItem=null;
public AddEditForm()
{
InitializeComponent();
//Other common code for initialization.
}
public AddEditForm(MyDataObj obj) : this()
{
editItem = obj;
//Other code specific to editing.
}
如果對象editItem
爲null ,那麼可以在添加模式下考慮表單,否則在編輯模式下考慮表單。
的屬性也可以爲同一個 例如進行:
public bool IsEditMode
{
get
{
return (editItem != null);
}
}
希望它可以幫助...
我認爲這沒關係,我通常做這種方式太。 – VahidNaderi
@VahidND要求回覆,另外一個。我是否需要在每個構造函數中調用InitializeComponent()? – user2783193
@ user2783193是的,你需要在每個構造函數中調用InitializeComponent()。相反,您可以像「public AddEditForm(MyDataObj obj):this()」那樣鏈接構造函數,並在無參數構造函數中調用InitializeComponent()方法。 – Virus