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