2011-09-18 8 views
2

내 프로젝트에는 3 개의 winform이 있고 Form3에는 확인란이 있습니다. 내가 할 수있게하려면이 확인란을 클릭 한 다음 양식이 종료 될 때 Form1에있는 것과 동일한 검사 (선택 여부에 관계없이)를 수행합니다. 내가 가지고있는 기존 코드는 다음과 같습니다.하지만 작동하지 않습니다. 어딘가에 속임수가 없습니까? 감사. 당신이 그런 식으로 참조 할 수 없습니다 Form1에서 있도록양식 간 데이터 전달

//Form3 

Form1 setDateBox = new Form1(); 
setDateBox.setNoDate(checkBox1.Checked); 

//Form1 

public void setNoDate(bool isChecked) 
{ 
    checkBox1.Checked = isChecked; 
} 
+3

양식과 컨트롤의 이름을 지정해야합니다. – SLaks

+0

@Slaks, 예,해야합니까, 그래서 내가 코드의 이름을 Form1을 사용하는 모든 변경뿐만 아니라 대에서 양식의 이름을 변경합니까? –

+0

폼의 이름을 바꿀 때 Visual Studio는 폼에 대한 모든 참조의 이름을 자동으로 바꿉니다. – SLaks

답변

3

방법의 몇 : - :

private void checkBox1_CheckedChanged(object sender, EventArgs e) 
{ 
    setDateBox.setNoDate(checkBox1.Checked); 
} 

1 스토어 Form1에 변수 Form3의 클래스 멤버로 "setDateBox"다음 확인란 CheckedChanged 이벤트 처리기에서 "setNoDate"방법에 액세스

2- 당신은 클래스 멤버로 setDateBox를 저장하지 않으 또는 하나 이상의 양식을 업데이트해야하는 경우, 당신은 어떤과 같이 Form3 내에서 이벤트를 정의 할 수 있습니다 :

public event EventHandler<CheckedChangedEventArgs> CheckBox1CheckedChanged; 

... 

public class CheckedChangedEventArgs : EventArgs 
{ 
    public bool CheckedState { get; set; } 

    public CheckedChangedEventArgs(bool state) 
    { 
     CheckedState = state; 
    } 
} 

를 Form1의 이벤트에 대한 핸들러 작성 :

Form1 setDateBox = new Form1(); 
CheckBox1CheckedChanged += new EventHandler<CheckedChangedEventArgs>(setDateBox.Form1_CheckBox1CheckedChanged); 

그리고 체크 박스의 체크 상태에 따라 Form3에서 이벤트를 (화재 :

public void Form1_CheckBox1CheckedChanged(object sender, CheckedChangedEventArgs e) 
{ 
    //Do something with the CheckedState 
    MessageBox.Show(e.CheckedState.ToString()); 
} 

양식을 작성한 후 이벤트 핸들러를 할당을 변경) :

private void checkBox1_CheckedChanged(object sender, EventArgs e) 
{ 
    if(CheckBox1CheckedChanged != null) 
     CheckBox1CheckedChanged(this, new CheckedChangedEventArgs(checkBox1.Checked)); 
} 

희망이 도움이됩니다.

2

checkBox1Form3의 구성원입니다.

당신 수 :

  • 당신이 myForm3Instance.checkBox1
2
하여 참조 할 수 있도록, 당신이
  • Form3.checkBox1가 공개적으로 볼 수 있도록
  • 전체 응용 프로그램에 영향을 값을 유지 양식 사이에 공유하는 별도의 클래스를 생성

    양식을 포함하는 양식의 디자이너에서 내부 또는 공개로 설정하십시오. 그런 다음 폼 개체에서 컨트롤에 액세스 할 수 있습니다. 그것을 달성하는 빠르고 더러운 방법이지만 그것은 당신의 문제를 해결할 수 있습니다.

    ex 
    In form1.designer.cs 
    existing 
    private CheckBox checkbox1; 
    
    new one 
    
    internal CheckBox checkbox1; or 
    public CheckBox checkbox1; 
    
    2

    Form1의 새 인스턴스를 만들고 기존 인스턴스를 참조하지 않습니다.

    Form1 setDateBox = (Form1)this.Owner 
    

    이렇게하면 문제가 해결됩니다.