如何处理构造函数?

时间:2014-03-01 10:52:52

标签: c# winforms

我有一个显示构造函数重载的代码..

我的第一个表单是Login.cs,代码是。

private void button1_Click(object sender, EventArgs e)
{   
    this.Hide();
    EmpPanel f = new EmpPanel(textBox1.Text);
    f.Show(); 
}

第二个表格是EmpPanel.cs我有2个构造函数 -

public EmpPanel( string uid)
{
    InitializeComponent();
    this.id1 = uid;    
}

public EmpPanel()
{
    InitializeComponent();
    this.button1.Enabled = false;
    this.ControlBox = false;
}

当我点击它时,第三种形式有一个按钮取消它再次返回到EmpPanel.cs ..

private void button4_Click(object sender, EventArgs e)
{
    this.Hide();
    EmpPanel ep = new EmpPanel();
    ep.Show();
}

问题是,当我点击thirdform的button4然后它初始化EmpPanel.Cs的Id时,记录不会保存在具有该id的数据库中,而不是id保存为0。 为什么..

2 个答案:

答案 0 :(得分:0)

您可以根据业务逻辑更改无参数构造函数以设置ID。

但似乎你的id1字段是字符串,所以它的默认行为应该是String.Empty。你确定id1是整数吗?

您可以反转逻辑,以便数据库通过将保留EmpPanel相关条目的数据库表的标识种子设置为yes来处理id生成。

或者您可以像这样更改构造函数:

public EmpPanel()
{
    InitializeComponent();
    this.button1.Enabled = false;
    this.ControlBox = false;

    this.id1 = GetMaxEmpPanelId();
}

private int GetMaxEmpPanelId()
{
    int maxId = 1000; //get max id from the related table and return it
    return maxId;
}

答案 1 :(得分:0)

而不是

EmpPanel ep = new EmpPanel();
ep.Show();

您应该返回到EmPanel的同一个实例。你可以这样做

EmpPanel ep= (EmpPanel) GetOpenedForm<EmpPanel>();
if (ep== null)
{
    ep= new EmpPanel();
    ep.Show();
} 
else 
{
    ep.Select();
}

其中

public static Form GetOpenedForm<T>() where T: Form {
    foreach (Form openForm in Application.OpenForms) {
        if (openForm.GetType() == typeof(T)) {
            return openForm;
        }
    }
    return null;
}