2017-04-06 13 views
0

parentFormからuserControlにクラスまたはメソッドにアクセスするためのアドバイスや可能な解決策があります。usercontrolを使用して親フォームからクラス/メソッドにアクセスする方法

私はちょうど同じフォーム上にuserControlを使用してdataGridgradingSheetからフォームをリロードすることでしたloadquizes()を再利用したかったです。

私のプロジェクトの私の構造だった:UserControlインサイド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); 
    } 

を呼び出すための

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

GradingSheetコード:

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

あなたが本当に再使用したい場合メソッドは複数の場所で実装することを検討するメソッドを別のクラスに入れて、FormまたはUserControlのメソッドを使用する代わりに、必要なコントロールまたはユーザーコントロールから使用します。コード行の下に問題があります。

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

Instreadは、返信用

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

おかげのような別のクラスでそれを持って、どのように私はそのアプローチをしますか?私はすでに他の場所からアクセスするように設定されていると思った公衆としてその方法を作っています –

+0

@RaymartCalinao、それが役立つ場合は答えを編集してください。 – Rahul

関連する問題