2016-07-11 17 views
-2

Ich habe zwei Formen, auf einer ist Monat, auf einer anderen ist TextBox. Problem ist, dass ich das Datum auf der TextBox nach der Auswahl nicht angezeigt bekomme. Um sicher zu sein, dass ich funktionierenden Code geschrieben habe, habe ich das gleiche nur auf einem Formular getan, und es funktioniert gut. Setzen Sie MonthCalendar auf public und gleich mit der TextBox, wo das Datum angezeigt werden soll.
enter image description hereSo zeigen Sie das Datum von MonthCalendar zu TextBox C#

Hier ist der Code für Button und für das 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(); 
} 

Versucht DateSelected auch und es wird mir das gleiche Ergebnis zu geben, nichts. Danke, danke.

+0

Das Problem, das Sie haben, ist, dass Sie versuchen, ein Formular außerhalb des Bereichs des zweiten Formulars zu verweisen. Sofern Sie nicht das Originalformular bei der Erstellung Ihres zweiten Formulars referenzieren, können Sie Änderungen nicht beeinflussen. Sehen Sie meine Antwort für 2 Methoden Sie können Ihr gewünschtes Ergebnis erreichen – Takarii

Antwort

0

Eine Methode, um den Wert in das vorherige Formular zu übertragen, ist die Verwendung von Ereignishandlern für das Schließen von Formularen und Methoden zum Abrufen/Festlegen des Werts. Zum Beispiel:

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

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

dann im Monat Kalenderform,

string date; 

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

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

benutzen, wenn Sie den Kalender schließen, wird der ausgewählte Wert übertragen werden.

Eine andere Methode besteht darin, im Konstruktor des zweiten Formulars einen Verweis auf das Formular zu senden, auf das die Änderungen angewendet werden sollen.

in Ihrer primären Form (das mit der Taste), wenn Sie das Popup-Formular zu erstellen, verwenden Sie die Syntax Form2 calendarform = new Form2(this) und eine öffentliche Methode schreiben, das tut, was Sie brauchen, um

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

In Ihrer zweiten Form (das eine mit dem Monatskalender) können Sie sich auf die vorherige Methode beziehen. Zum Beispiel:

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()); 
    } 

Weil wir die bisherigen Form in die zweite Form verweisen, sind Sie in der Lage, alle öffentlichen Methoden aufrufen, die auf form1 laufen wird. In diesem Fall können Sie die Methode SetText() von form2 aus aufrufen, wodurch die Textbox auf den von uns gewünschten Wert geändert wird - in Ihrem Fall der ausgewählte Wert des Monatskalenders.

Die Methode DateChanged bedeutet, dass diese Methode in Echtzeit aufgerufen wird, wenn Sie das Datum ändern.

+0

Da ich neu in der C# bin, brauche ich Hilfe bei der Syntax in einigen Zeilen. In der zweiten Methode, wo "Form2 calendarform = new Form2 (this)" geht? Ich bekomme: "Dieses" Schlüsselwort ist im Kontext nicht verfügbar. – Manojlo

+0

der 'This' Teil bedeutet grundsätzlich" dieses Objekt ". In diesem Fall bedeutet "dies" das Senden von form1 an die zweite Form. Der Konstruktor für das zweite Formular muss Form1 als Wert annehmen. dh 'Form2 (Form1 originalform)' – Takarii

+0

Sie müssen den 'Form2 calendarform = new Form2 (this)' Teil in Ihre Schaltfläche setzen, die Ihr monthcalander Formular aufruft – Takarii