C# 如何在c中查找调用当前winForm/对象的类/对象#

C# 如何在c中查找调用当前winForm/对象的类/对象#,c#,C#,大家好,我有3个winForms,分别是carForm、parForm和updateForm,所以在carForm和parForm中都有updateForm.show()方法,而在updateForm中,我想知道哪个类/表单调用了updateForm,这样我就可以更新受尊重的类db。目前,我正在设置一个publicglobalvariable,以验证哪个表单正在调用updateForm。但我在想是否还有其他方法可以做到这一点,我想反射可以解决这个问题,但我无法解决它,这是我的代码 ///carF

大家好,我有3个winForms,分别是carForm、parForm和updateForm,所以在carForm和parForm中都有
updateForm.show()
方法,而在updateForm中,我想知道哪个类/表单调用了updateForm,这样我就可以更新受尊重的类db。目前,我正在设置一个
public
global
variable
,以验证哪个表单正在调用updateForm。但我在想是否还有其他方法可以做到这一点,我想反射可以解决这个问题,但我无法解决它,这是我的代码

///carForm
public class carForm:Form
{
    Program.globalvariable="CAR";    //global variable
    UpdateFrom updateForm=new UpdateForm();
    updateForm.Show();

}

///parForm
public class parForm:Form
{
     Program.globalvariable="PAR";
     UpdateFrom updateForm=new UpdateForm
     updateForm.Show();

}

///updateForm
public class updateForm:Form
{
    if(Program.globalvariable=="CAR")
       ///code for update CAR db table
    else if(Program.globalvariable=="PAR")
       ///code for update PAR db table

    Type obj = GetType();  //This is what i was tryin' using Reflection but giving error

}
因此,如果我得到调用类/对象信息,我可以更新数据库表


如果ne1知道如何使用反射来实现这一点,

如果要自动获取此类信息,可能需要查看类。但是不确定使用它的性能…

将参数放入
updateForm

///carForm
public class carForm:Form
{
    UpdateFrom updateForm=new UpdateForm("CAR");
    updateForm.Show();
}

///parForm
public class parForm:Form
{
     UpdateFrom updateForm=new UpdateForm("PAR");
     updateForm.Show();
}

///updateForm
public class updateForm:Form
{
    private readonly string _key;
    public updateForm(string key)
    {
        _key = key;
    }

    public void SomeMethod()
    {
        // check for _key here.
    }
}
编辑:
如果您想要实际的类型,您可以直接传递它,不需要反射

///carForm
public class carForm:Form
{
    UpdateFrom updateForm=new UpdateForm(this.GetType());
    updateForm.Show();
}

///parForm
public class parForm:Form
{
     UpdateFrom updateForm=new UpdateForm(this.GetType());
     updateForm.Show();
}

///updateForm
public class updateForm:Form
{
    private readonly Type _type;
    public updateForm(Type type)
    {
        _type = type;
    }

    public void SomeMethod()
    {
        // check for _type here.
    }    
}
编辑2:
但一般来说,像这样传递类型闻起来像是坏代码。你的控制流可能会像一碗意大利面条一样结束

如果希望
updateForm
更新其他表单上的某些值,则应

  • 发送有关在
    updateForm
    的构造函数中的
    updateForm
    中显示哪些问题/标题等的所有相关信息
  • updateForm
    中,保存
    updateForm
  • 根据退出方式,将
    updateForm
    中的
    DialogResult
    设置为
    OK
    Cancel
  • 像这样调用
    updateForm
    if(updateForm.ShowDialog==DialogResult.OK){//read all properties from updateForm}

  • @福斯特,你为什么要使用反射?您想知道呼叫者的类型而不是字符串“PAR”/“CAR”吗?或者您想引用调用updateForm的实际表单吗?我想知道调用方和type@FosterZ,通常您不希望这样。应该向
    updateForm
    查询值,而不是找出是谁问了什么。在我的答案中Se update 2.hmm thanx man我现在明白了,现在我有点好奇为什么我在这条语句中出错了
    Type obj=GetType()