C# 如何与施工人员打交道?

C# 如何与施工人员打交道?,c#,winforms,C#,Winforms,我有一个显示构造函数重载的代码 我的第一个表单Login.cs,代码是 private void button1_Click(object sender, EventArgs e) { this.Hide(); EmpPanel f = new EmpPanel(textBox1.Text); f.Show(); } 第二种形式是EmpPanel.cs,我有两个构造函数-- 第三种形式是当我再次点击它时,有一个按钮cancel,它将返回EmpPanel.cs p

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

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

private void button1_Click(object sender, EventArgs e)
{   
    this.Hide();
    EmpPanel f = new EmpPanel(textBox1.Text);
    f.Show(); 
}
第二种形式是EmpPanel.cs,我有两个构造函数--

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

private void button4_Click(object sender, EventArgs e)
{
    this.Hide();
    EmpPanel ep = new EmpPanel();
    ep.Show();
}
问题是,当我单击thirdform的按钮4时,它会初始化EmpPanel的Id。然后,Cs记录不会使用该Id保存在数据库中,而将Id保存为0。
为什么..

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

但您的id1字段似乎是string,所以它的默认行为应该是string.Empty。您确定id1是整数吗

您可以反转您的逻辑,以便数据库通过为保存EMPANEL相关条目的数据库表将identity seed设置为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;
}
而不是

EmpPanel ep = new EmpPanel();
ep.Show();
您应该返回到EmPanel的同一个实例。你可以这样做

EmpPanel ep= (EmpPanel) GetOpenedForm<EmpPanel>();
if (ep== null)
{
    ep= new EmpPanel();
    ep.Show();
} 
else 
{
    ep.Select();
}
EmpPanel ep=(EmpPanel)GetOpenedForm();
if(ep==null)
{
ep=新的EMP面板();
ep.Show();
} 
其他的
{
ep.Select();
}
在哪里

公共静态表单GetOpenedForm(),其中T:Form{
foreach(Application.OpenForms中的表单openForm){
if(openForm.GetType()==typeof(T)){
返回openForm;
}
}
返回null;
}

因为
按钮4
会这样做:
EmpPanel ep=new EmpPanel()
并且无参数构造函数没有设置ID。您希望得到什么?我想将表单从Button4重定向到EmpPanel.cs\u单击而不初始化ID。我们如何做到这一点?@antpinInitialization总是发生,并将字段设置为默认值。对于
int
,该值为
0
。如果您不想这样做,可以将
this.id1
int?
的类型设置为,然后它将被初始化为
null
。听起来您需要在表单之间传递
EmpPanel
的实例,但无法根据发布的代码告诉您需要更改什么。您需要的完整code.id不是自动生成的。我们可以显式地指定它-Emp007@Mayank所以根据你的身份证生成逻辑上,您可以创建一个id工厂类,并通过在无参数构造函数上使用该工厂类来设置id。@Mayank ie GetMaxEmpPanelId上面的方法可以按您希望的方式返回id。我不想要最大id,但这将为ex-100提供最大id。但我必须搜索Emp007@Mayank所以你应该改变这种行为(即生成id类似于Emp007)根据您的id逻辑。我不知道您是如何构造逻辑的。如果方法或操作未实现,则会出现错误。.private EmpPanel GetOpenedForm(){throw new NotImplementedException();}您的EmpPanel是从继承的吗?抱歉。GetOpenedForm是我拥有的一个扩展方法。我忘记了。我已经编辑了我的答案。我使用了上面的代码,但什么也不会发生。它不会创建任何错误,也不会重定向到EmpPanel.cstry添加表单。Focus();它应该可以工作,这可能取决于版本
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;
}