2017-01-22 7 views
0

Ich schreibe eine Winform-Anwendung, und irgendwann möchte ich den Benutzer auffordern, ein Datum aus einem Kalender auszuwählen. Nach dem Durchsuchen von Google dachte ich mir, dass ich das MonthCalendar-Steuerelement verwenden könnte, um das zu erreichen. Jetzt ist hier, was ich habe:Benutzer zur Auswahl eines Datums mit dem Monatskalender-Steuerelement auffordern

MonthCalendar monthCalendar = new MonthCalendar(); 
    monthCalendar.Show(); 

Das Problem ist, dass nichts passiert, wenn dieser Code erreicht wird. Was mache ich falsch?

Dank

+0

Das Monthcalendar-Steuerelement sollte seine Form controlscollection hinzugefügt werden. Es kann nicht selbst angezeigt werden – Steve

+0

Das erklärt alles. Vielen Dank ! – Toto

+0

Es ist möglich, ein kleines Formular mit einem 'MonthCalender'-Steuerelement und einer Schaltfläche zu erstellen, um zu signalisieren, wann ein Datum eingegeben wurde. Dann einfach 'ShowDialog()' auf diesem Formular, um den Benutzer aufzufordern, ein Datum einzugeben? – JohnG

Antwort

0

Dies ist sehr grundlegende Windows Forms Handhabung.

Ein MonthCalender ist ein Steuerelement. Sie können nicht nur Kontrollen anzeigen. Kontrollen können nur auf einem ContainerControl gezeigt werden. A ContainerControl ist ein Steuerelement, das andere Steuerelemente enthalten kann und dafür sorgt, dass sie angezeigt werden.

Eines der bekanntesten ContainerControls ist die Form. Im Visual Studio verwenden wir normalerweise den Designer, um das Formular zu erstellen und Controls darauf zu setzen.

Je nachdem, ob Sie Ihren speziellen MonthCalender nur auf einem bestimmten Formular haben möchten oder ob Sie ihn auf mehreren Formularen wiederverwenden möchten, müssen Sie entscheiden, ob Sie seinen MonthCalender auf einem Formular oder einem Benutzersteuerelement ablegen möchten.

Das nette Ding über ein Benutzersteuerelement ist, dass Sie den Designer in Visual Studio verwenden können, um Ihren speziellen MonthCalender auf ein beliebiges Formular zu ziehen.

Aber am Ende müssen Sie Ihren MonthCalender irgendwo auf ein Formular setzen. Sobald Sie Ihr Formular zeigen, wird der MonthCalender angezeigt.

public class MySpecialForm : Form 
{ 
    public MySpecialForm() 
    { 
     InitializeComponent(); 
    } 
} 

Die oben wird von Visual Studio-Designer erstellt, wenn Sie ein Formular zu Ihrem Projekt hinzugefügt haben: direkt im Projektmappen-Explorer auf das Projekt klicken und wählen Sie Hinzufügen - Windows Form

im Designer Sie die Auswahl Toolbox (Menü Ansicht Toolbox), wählen Sie in der Toolbox unter Common Controls den Monatskalender und klicken Sie auf Ihr Formular, wo Ihr Monatskalender angezeigt werden soll.

Dies ist grundlegende Formgestaltung.Sobald Sie Ihre Monthcalendar hinzugefügt haben, wird der Code in InitializeComponent erstellt:

private System.Windows.Forms.MonthCalendar monthCalendar1; 

private void InitializeComponent() 
{ 
    this.monthCalendar1 = new System.Windows.Forms.MonthCalendar(); 
    // 
    // monthCalendar1 
    // 
    this.monthCalendar1.Location = new System.Drawing.Point(266, 83); 
    this.monthCalendar1.Name = "monthCalendar1"; 
    this.monthCalendar1.TabIndex = 3; 

Sie diese Datei nicht bearbeitet sehr oft, ist es viel einfacher, die Designer zu verwenden.

Sobald Sie Ihre Form und Sie wollen es zeigen, zum Beispiel, nachdem jemand einen Knopf auf dem Hauptformular angeklickt:

private void OnMainFormButtonClicked(object sender, ...) 
{ 
    using (var mySpecialForm = new MySpecialForm() 
    { 
     // if desired set some properties of the form before showing 
     mySpecialForm. ... 
     // show the form and wait for the result: 
     var dlgResult = mySpecialForm.ShowDialog(this); 
     // process the result 
     if (dlgResult == ...) 
     { 
      ProcessResult(form.GetFormResult); 
     } 
    } 
0

Es ist nicht schwer, dies zu tun. Der folgende Code verwendet eine kleine Form mit einer MonthCalender und eine Button in dem unten gezeigten Designer erstellt.

enter image description here

Diese Form wird von einer anderen „Eltern“ Form bezeichnet. Wenn der Benutzer auf die Schaltfläche "Beendet" klickt, kann das übergeordnete Formular dieses Datum mit der folgenden öffentlichen Methode GetDT abrufen, die sich in der FormCalender befindet. Dieser Code erhält nur das erste ausgewählte Datum, der Benutzer kann jedoch mehrere Daten auswählen. Außerdem können Sie bei Bedarf eine Fehlerprüfung durchführen. Hoffe das hilft.

Form 1:

public Form1() { 
    InitializeComponent(); 
} 

private void button1_Click(object sender, EventArgs e) { 
    FormCalendar fc = new FormCalendar(); 
    fc.ShowDialog(); 
    MessageBox.Show("User Selected Date: " + fc.GetDT.ToLongDateString()); 
} 

FormCalendar

public FormCalendar() { 
    InitializeComponent(); 
} 

private void button1_Click(object sender, EventArgs e) { 
    this.Close(); 
} 

public DateTime GetDT { 
    get { 
    return monthCalendar1.SelectionStart; 
    } 
} 
Verwandte Themen