2016-07-11 2 views
-2

한 달에 한 달에 두 자리를, 다른 한 달에 두 자리를 TextBox로 구성했습니다. 문제는 TextBox를 선택한 후 표시되는 날짜가 표시되지 않는다는 것입니다. 작업 코드를 작성했는지 확인하기 위해 동일한 양식을 한 양식에 작성 했으므로 제대로 작동합니다. MonthCalendar를 public으로 설정하고 DateBox가 표시되어야하는 TextBox와 동일하게 설정하십시오. 여기 enter image description hereMonthCalendar에서 TextBox로 날짜를 표시하는 방법 C#


는 버튼과 MonthCalendar를위한 코드입니다

public void mcKalendar_DateChanged() 
{ 
    frmNovoVozilo fNv = new frmNovoVozilo(); 
    fNv.txtDatKupovine.Text = 
      mcKalendar.SelectionRange.Start.ToShortDateString(); 
} 

private void btnDatum_Click(object sender, EventArgs e) 
{ 
    frmKalendar fKalen = new frmKalendar(); 
    fKalen.StartPosition = FormStartPosition.CenterScreen; 
    fKalen.Show(); 
} 

나요 또한 DateSelected하고, 나에게 아무것도 같은 결과를하지 않을거야보십시오. 감사합니다.

+0

문제는 두 번째 폼의 범위를 벗어나는 폼을 참조하려고한다는 것입니다. 두 번째 작성시 원본 양식을 참조하지 않으면 변경 사항에 영향을 미치지 않습니다. 원하는 결과를 얻을 수있는 두 가지 방법에 대한 내 대답을 참조하십시오. – Takarii

답변

0

값을 이전 양식으로 전송하는 한 가지 방법은 양식 닫기 이벤트 처리기를 사용하고 값을 추출하는 get/set 메서드입니다. 예를 들어 달력을 닫으면

form1 = new Form1(); 
form1.FormClosing += new FormClosingEventHandler(GetDateFromForm); 

private void GetDateFromForm(object sender, FormClosingEventArgs e) 
{ 
    textbox1.Text = from1.GetDate; 
} 

는 다음 달 달력 형태로, 선택한 값이 옮겨진 것,

string date; 

public string GetDate {get {return date;} set {date = value;}} 

Public Form2() 
{ 
    date = monthCalendar1.SelectionStart.ToShortDateString(); 
} 

를 사용합니다.

또 다른 방법은 두 번째 폼의 생성자에서 변경 내용을 적용 할 폼에 대한 참조를 보내는 것입니다. 기본 형태 (버튼과 하나) 당신이 팝업 양식을 만들 때, 구문 Form2 calendarform = new Form2(this)을 사용하고 당신이 (당신의 두 번째 양식에서

public void SetText(string text) 
{ 
    textbox.Text = text; 
} 

에 필요한 않는 공공 방법을 쓰기에

한 달 캘린더가있는 경우) 이전 방법을 참조 할 수 있습니다. 예를 들어 :

public partial class Form2 : Form 
{ 
    Form1 _owner; 

    public Form2(Form1 form) 
    { 
     InitializeComponent(); 

     _owner = form; 
    } 

    private void monthCalendar1_DateChanged(object sender, DateRangeEventArgs e) 
    { 
     _owner.SetText(monthCalendar1.SelectionEnd.ToShortDateString()); 
    } 

우리가 두 번째 형태의 이전 형태를 참조하고 있기 때문에, 당신은 Form1에 실행됩니다 모든 public 메소드를 호출 할 수 있습니다. 따라서이 경우에는 SetText() 메서드를 form2에서 호출하면 텍스트 상자가 원하는대로 변경됩니다. 여기서는 선택한 값인 monthcalendar를 변경합니다.

DateChanged 메서드를 사용하면 날짜를 변경할 때 실시간으로 해당 메서드를 호출한다는 의미입니다.

+0

저는 C#을 처음 접했기 때문에 일부 줄의 구문에 도움이 필요합니다. 두 번째 방법은 어디에 "Form2 calendarform = 새로운 Form2 (this)"가? 나는 "this"키워드를 사용할 수 없다. – Manojlo

+0

'this '부분은 기본적으로 "이 객체"를 의미합니다. 그래서이 경우'this '는 form1을 두 번째 형식으로 보내는 것을 의미합니다. 두 번째 폼의 생성자는 Form1을 값으로 가져와야합니다. 'Form2 (Form1 originalform) ' – Takarii

+0

당신의 월 캘린더 폼을 호출하는 버튼에'Form2 calendarform = new Form2 (this)'부분을 넣어야합니다 – Takarii