2017-04-06 65 views
0

我想獲得一些建議或可能的解決方案來訪問從parentFormuserControl的類或方法。使用usercontrol從父窗體訪問類/方法

我想重複使用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(); 
     } 
    } 

回答

0

如果你真的想重新使用該方法多個地方然後考慮實施噸他在單獨的課程中使用該方法,並將其用於您想要的任何來源或用戶控制,而不是使用FormUserControl中的方法。下面的代碼行是問題。

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

Instread有它像

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

感謝回答一個單獨的類中,我如何做到這一點的方法嗎?我已經使這種方法公開,我認爲這將設置好從其他地方訪問 –

+0

@RaymartCalinao,請參閱編輯答案,如果有幫助。 – Rahul