繁体   English   中英

一种使用usercontrol从父窗体访问类/方法的方法

[英]A way to access class/method from parent form using usercontrol

我想提出一些建议或可能的解决方案,以从parentFormuserControl访问类或方法。

我想重用loadquizes() ,这只是为了使用相同表单上的userControlgradingSheet表单重新加载dataGrid

我的项目结构是:

Mainform(Form) 
|_Gradingsheet(MDIchild/Also a Form)
        |_mypanel(inside the Gradingsheet)
              |_updatequizes(usercontrol)

GradingSheet代码调用userControl

private void updateQuizToolStripMenuItem_Click(object sender, EventArgs e)
    {
        quiz = new UpdateQuizes();
        quiz.lrnLbl.Text = MelrnLbl.Text;
        quiz.nameLbl.Text = MEnameLbl.Text;
        quiz.quartervar.Text = quartervar.Text;
        quiz.GradeLbl.Text = GradeLbl.Text;
        quiz.subjLbl.Text = subjLbl.Text;
        quiz.yearLbl.Text = yearLbl.Text;
        UserControlPanel.Controls.Clear();
        UserControlPanel.Controls.Add(quiz);
    }

UserControl内部:

void insertQuiz()
    {
        using (MySqlConnection conn = new MySqlConnection(myConnection))
        {
            string query = "UPDATE GimenezSystem.quizes SET Q"+(quizcombo.SelectedIndex + 1) + " =?newval WHERE Year=?year and GradeLevel=?glevel and Subject=?subj and Quarter =?qtr and LRN =?LRN";
            conn.Open();
            using (MySqlCommand cmd = new MySqlCommand(query, conn))
            {
                try
                {
                    cmd.Parameters.AddWithValue("?LRN", lrnLbl.Text);
                    //cmd.Parameters.AddWithValue("?quiz", quiz);
                    cmd.Parameters.AddWithValue("?newval", NewVal.Text);
                    cmd.Parameters.AddWithValue("?year", yearLbl.Text);
                    cmd.Parameters.AddWithValue("?glevel", GradeLbl.Text);
                    cmd.Parameters.AddWithValue("?subj", subjLbl.Text);
                    cmd.Parameters.AddWithValue("?qtr", quartervar.Text);
                    cmd.ExecuteNonQuery();
                    GradingSheet gr = GradingSheet.ActiveForm as GradingSheet;
                    gr.loadquizes();//here it gives me an error of object is not set for reference of instance or something like that T.T
                }
                catch (Exception ex)
                {
                    MessageBox.Show("error" + ex);
                }

            }

            conn.Close();
        }
    }

如果您真的想在多个地方重用该方法,则可以考虑在一个单独的类中实现该方法,并在所需的任何位置或用户控件中使用该方法,而不是在FormUserControl中使用该方法。 代码行下面是问题。

          GradingSheet gr = GradingSheet.ActiveForm as GradingSheet;
                gr.loadquizes();//he

Instread将其放在单独的类中,例如

public class Helper
{
  public void LoadQuizes()
  {
     //code here
  }
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM