如何找出哪个类/对象在c#中调用当前的winForm / object

时间:2010-11-05 08:42:25

标签: c#

嘿伙计们,我有3个winForms,名为carForm,parForm和updateForm,所以在carForm n parForm中有updateForm.show()方法,而在updateForm中我想知道哪个类/表单调用了updateForm,所以我可以更新受尊重的类db。目前我正在设置一个public全局variable来验证哪个表单正在调用updateForm ..但我认为'还有另一种方法可以做到这一点,我想Reflection可以解决这个问题,但是我无法解决,这是我的代码

///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

}

所以,如果我得到调用的类/对象信息,我可以更新受尊重的数据库表,

可以通过Reflection来知道hw这样做,

2 个答案:

答案 0 :(得分:2)

将参数放在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更新其他表单上的某些值,则

  1. 发送有关updateForm构造函数中updateForm显示的问题/标题/等的所有相关信息。
  2. updateForm中,将相关“答案”保存到updateForm
  3. 的公共属性中
  4. DialogResult中的updateForm设置为OKCancel,具体取决于您如何退出updatForm
  5. 像这样致电updateFormif (updateForm.ShowDialog == DialogResult.OK) {// read all properties from updateForm}

答案 1 :(得分:0)

如果您想自动获取此类信息,则可能需要查看StackTrace课程。虽然不确定使用它的性能......