2017-04-06 8 views
0

parentForm에서 userControl으로 클래스 또는 메서드에 액세스하기위한 몇 가지 조언이나 가능한 솔루션을 갖고 싶습니다. usercontrol을 사용하여 부모 폼에서 클래스/메서드에 액세스하는 방법

나는 같은 양식의 userControl를 사용하여 gradingSheet 형태에서 dataGrid를 다시로드 불과했다 loadquizes()를 재사용하고 싶었다. 내 프로젝트의

내 구조

을했다 : 당신이 정말로 다시 사용하려는 경우

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

:

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

GradingSheet 코드가 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); 
    } 

를 호출 이 방법은 여러 곳에서 t를 구현하는 것을 고려한다. 그는 별도의 클래스에서 메서드를 사용하거나 Form 또는 UserControl의 메서드를 사용하는 대신 원하는 사용자 컨트롤에서 사용합니다. 코드 줄 아래에 문제가 있습니다. 내가 그 방법을 얼마나

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

Instread 그것은,

회신에 대한
public class Helper 
{ 
    public void LoadQuizes() 
    { 
    //code here 
    } 
} 
+0

감사와 같은 별도의 클래스에 있나요? 나는 이미 다른 사람들이 접근 할 수 있도록 설정할 것이라고 생각한 public으로 그 방법을 만들었습니다. –

+0

@RaymartCalinao, 도움이 될 경우 답변을 편집하십시오. – Rahul