代码之家  ›  专栏  ›  技术社区  ›  FosterZ

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

c#
  •  -1
  • FosterZ  · 技术社区  · 14 年前

    嘿,伙计们,我有三个winForms,分别是carForm、parForm和updateForm,所以 updateForm.show() public 全球的 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
    
    }
    

    所以如果我得到调用类/对象的信息,我可以更新受尊敬的DB表,

    ne1能知道反射是怎么做到的吗,

    2 回复  |  直到 14 年前
        1
  •  2
  •   Albin Sunnanbo    14 年前

    将参数放入 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:

    更新窗体 要更新其他窗体上的某些值,您应该

    1. 更新窗体 .
    2. ,保存公共属性的相关“答案” 更新窗体
    3. DialogResult 在里面 更新窗体 OK Cancel 取决于你如何退出 updatForm
    4. 呼叫 更新窗体 这样地: if (updateForm.ShowDialog == DialogResult.OK) {// read all properties from updateForm}
        2
  •  0
  •   Kieron    14 年前

    你可能得看看 StackTrace