2016-07-11 48 views
-2

我有兩種形式,一種是月份,另一種是TextBox。 問題是我選擇它後沒有在TextBox上顯示日期。爲了確定我寫了工作代碼,我只在一個表單上做了同樣的事情,並且它工作正常。 將MonthCalendar設置爲公共,並與需要顯示日期的TextBox相同。
enter image description here如何從MonthCalendar顯示日期到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

您遇到的問題是您嘗試引用第二個窗體範圍之外的窗體。除非您在創建第二個表格時參考了原始表格,否則不會影響更改。看到我的答案2種方法可以實現您想要的結果 – 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上運行的公共方法。因此,在這種情況下,您可以調用form2中的SetText()方法,這會將文本框更改爲我們想要的任何內容 - 在您的情況下爲monthcalendar的選定值。

使用DateChanged方法意味着它將在您更改日期時實時調用所述方法。

+0

因爲我剛剛接觸C#,所以在某些行上需要語法幫助。在「Form2 calendarform = new Form2(this)」的第二種方法中, 我得到:「this」關鍵字在上下文中不可用。 – Manojlo

+0

'this'部分基本上是指「這個對象」。所以在這種情況下,'this'就意味着將form1發送給第二種形式。第二種形式的構造函數需要將Form1作爲值。即'Form2(Form1 originalform)' – Takarii

+0

您需要將'Form2 calendarform = new Form2(this)'部件放入您的按鈕中,調用您的月份表單 – Takarii