text: Kalender Control | myCSharp.de
  Kalender Control
  Ein kleines Kalender-Control, welches die Anzeige von Einträgen/Terminen ermöglicht.
  Schlagwörter: Kalender, Control, Termine
  Brauche für mein momentanes Projekt ein kleines Kalender-Control, mit welchem ich Termine anzeigen kann. Wie einige von euch vielleicht merken, hab ich als Vorlage den Windows Live Mail Kalender genommen, da der mir besonders gefallen hat.
  Vielleicht können es einige von euch für zukünftige Projekte brauchen. Falls euch extrem schlimme Coding-Style Errors oder Ähnliches auffällt wäre ich froh, wenn ihr mich darauf hinweisen könnt, damit ich es verbessern kann.
  Problem beim Ändern des Start-Datums behoben
  Monatsname wird nun in der Mitte des Monats angezeigt
  Im Anhang noch ein Screenshot
  Dieser Beitrag wurde 4 mal editiert, zum letzten Mal von Aratar am 30.06.2011 - 16:16 .
  Kalender2.jpg
  31.08.2010 - 18:49 private Nachricht | Beiträge des Benutzers
  Calendar-Control.rar
  Moderationshinweis von herbivore (04.01.2011 - 11:53:29):
  Dies ist die (jeweils) aktuellste Version.
  vorher: KalenderControl.zip (123,11 KB, 212 mal heruntergeladen)
  31.08.2010 - 18:52 private Nachricht | Beiträge des Benutzers
  Zitat von Aratar
  Vielleicht können es einige von euch für zukünftige Projekte brauchen.
  Sieht schick aus! Danke
  Falls euch extrem schlimme Coding-Style Errors oder Ähnliches auffällt wäre ich froh, wenn ihr mich darauf hinweisen könnt, damit ich es verbessern kann.
  Die werden selbstverständlich direkt in das entsprechende Forum gepostet: Coding Styles Horror 8)
  Dieser Beitrag wurde 1 mal editiert, zum letzten Mal von MrSparkle am 31.08.2010 - 19:38 .
  31.08.2010 - 19:37 private Nachricht | Beiträge des Benutzers
  Hallo Aratar,
  Da so eins im Visual Studio noch nicht vorhanden ist
  Das hat mit VS nichts zu tun. Die Controls die dabei sind gehören zum .net Framework.
  Im Projekt wäre es praktisch wenn Dateiname und Klassenname zusammenpassen. Form1.cs, Form2.cs, ... sind nicht aussagekräftig. Benenne Form3.cs -> NeuerEintrag.cs oder noch besser NeuerEintragView.cs - die Klasse heißt dann eben auch NeuerEintragView. So weiß dann jeder sofort um was es sich handelt. Das ist v.a. bei größeren Projekten wichtig.
  Es ist auch praktisch wenn jede Klasse in eine eigene Datei kommt. So zB Form1.cs splitten in 3 Dateien -> zB MainView.cs, Calender.cs und ItemCollection.cs
  Selbiges gilt für die Bezeichnung der Member. ZB button1 sagt nichts aus - außer dass ein Button sein wird.
  Die Forms NeuerEintrag und ItemChangeForm sind weitesgehend ident (zumindest optisch). Hier könntest du überlegen ob du nicht eine Form daraus machst.
  Den Code hab ich ganz schnell überflogen.
  02.09.2010 - 22:03 private Nachricht | Beiträge des Benutzers
  1. Die Benennung ist suboptimal.
  2. Schau dir das Dispose pattern an und warum das da ist. Du erstellst haufenweise Pen´s usw in der onpaint... google mal. Sonst gibt es per Zufallsprinzip OutOfMemoryExceptions
  3. Teile lange Methoden in mehrere auf, wenn diese in in sich geschlossene funktionale bereiche (bei dir sind es momentan regionen) unterteilt werden können.
  So, hab mir eure Verbesserungsvorschläge zu Herzen genommen und sie geändert. Hab den Kalender ausserdem noch um die Navigationsmöglichkeit mit den Pfeil-Tasten erweitert.
  Dieser Beitrag wurde 4 mal editiert, zum letzten Mal von Aratar am 05.09.2010 - 18:46 .
  Moderationshinweis von herbivore (22.06.2011 - 08:12:00):
  Anhang entfernt, die aktuelle Version befindet sich oben im zweiten Beitrag
  vorher: KalenderControl (5).zip (146 KB, 201 mal heruntergeladen)
  05.09.2010 - 15:47 private Nachricht | Beiträge des Benutzers
  hast Du das Kalenderprojekt auch für VS2005 ??
  16.09.2010 - 16:05 private Nachricht | Beiträge des Benutzers
  @Aratar:
  Schon viel besser. Dein Code wirkt aufgeräumt, wenn auch noch prozedural anstatt objektorientiert. Aber für den Anfang sehr gut.
  2 Anmerkungen habe ich dennoch.
  1. Verwende besser Using() {...} anstatt das manuelle Dispose, um das Freigeben der Ressourcen zu garantieren.
  2. Wenn du eine Methode aufrufst und innerhalb der Parameter ein "new Pen..." machst, heißt das nicht, das dieser Pen nicht freigegeben werden muss. Du musst auch für diese Freigabe sorge tragen. Üblicherweise erzeugt man daher keine Objekte, die ein Dispose haben, innerhalb eines Methodenaufrufes.
  @ChrisProg:
  Wo liegt dein Problem? Lass VS das Projekt konvertieren und gut ist.
  Tja, das dachte ich auch,
  aber anscheinend ist VS nicht abwärtskompatibel.
  Doppelklick auf die Kalendercontrol.sln --> nichts passiert !!!
  Neues Projekt, manuelles Einfügen der *.cs-Dateien --> funktioniert,
  aber beim Aufruf z.B. des MainViews erhalte ich nur folgende Zeile:
  Beim Laden des Designers sind die nachfolgend aufgeführten Fehler aufgetreten.
  Einige können durch Neuerstellen des Projekts behoben werden, andere erfordern möglicherweise Änderungen am Code.
  Die Variable itemCollection1 wurde nicht deklariert oder nicht zugeordnet.
  Der Typ KalenderTestAnwendung.ItemCollection wurde nicht gefunden. Stellen Sie sicher, dass auf die Assembly, die diesen Typ enthält, verwiesen wird. Wenn dieser Typ Teil Ihres Entwicklungsprojekts ist, stellen Sie sicher, dass das Projekt erfolgreich generiert wurde.
  Der Typ KalenderTestAnwendung.Calendar wurde nicht gefunden. Stellen Sie sicher, dass auf die Assembly, die diesen Typ enthält, verwiesen wird. Wenn dieser Typ Teil Ihres Entwicklungsprojekts ist, stellen Sie sicher, dass das Projekt erfolgreich generiert wurde.
  Die Variable calendar1 wurde nicht deklariert oder nicht zugeordnet.
  bei System.ComponentModel.Design.Serialization.CodeDomSerializerBase.DeserializeExpression (IDesignerSerializationManager manager, String name, CodeExpression expression)
  bei System.ComponentModel.Design.Serialization.CodeDomSerializerBase.DeserializeStatement (IDesignerSerializationManager manager, CodeStatement statement)
  also scheint Downgrade leider nicht möglich zu sein, deshalb meine Frage.
  Gruß ChrisProg
  17.09.2010 - 08:18 private Nachricht | Beiträge des Benutzers
  Ich habe schon duzende Projekte konvertiert. Der Fehler liegt bei dir lokal.
  Dieser Thread hier ist jedoch ungeeignet um das Problem zu lösen.
  17.09.2010 - 09:10
  Hab erst jetzt gesehen, dass es noch weitere Antworten auf diesen Thread gab.
  Vielen Dank für die Anmerkungen, werde sie noch berücksichtigen.
  Mich würde nur noch interessieren, was genau du mit "...auch noch prozedural anstatt objektorientiert." meinst. (Ich hoffe das sprengt nicht den Rahmen dieses Threads)
  21.09.2010 - 19:14 private Nachricht | Beiträge des Benutzers
  Beschäftige dich mit OOP. Dann wird dir das bestimmt klarer :-)
  Dieser Beitrag wurde 1 mal editiert, zum letzten Mal von Aratar am 03.01.2011 - 17:38 .
  Moderationshinweis von herbivore (22.06.2011 - 08:12:42):
  vorher: Calendar-Control.rar (8,11 KB, 180 mal heruntergeladen)
  03.01.2011 - 17:37 private Nachricht | Beiträge des Benutzers
  erst einmal vielen Dank für die BEreitstellung des Controls; Gefällt mir sehr gut.
  Ich probiere gerade ein wenig damit rum um festzustellen ob ich es in einem Projekt verwenden kann.
  Ich bin dabei über etwas gestolpert, dass aber eventuell auch an falscher Bedienung liegen kann daher meine kurze Schilderung.
  Wenn ich die StartDate-Property verändere, stimmen mitunter die Angaben nicht mehr, da der erste Tag immer auf den Montag gelegt wird.
  Als Beispiel habe ich das StartDate auf den 01.06.2011 gelegt. Zur Verdeutlichung habe ich einen Screenshot beigefügt.
  Gibt es hierfür eine "integrierte" Lösung? Andernfalls würde ich versuchen die Auflistung des Date - Properties selbst aufzubauen.
  17.06.2011 - 12:16 private Nachricht | Beiträge des Benutzers
  Vielen Dank für den Hinweis. Da hatte ich vergessen bei der Änderung des StartDate-Properties das Anfangsdatum richtig zu setzen. Ich habe es geändert und in der angehängten Version stimmt es nun.
  Moderationshinweis von herbivore (22.06.2011 - 08:14:14):
  vorher: Calendar-Control.rar (12 KB, 13 mal heruntergeladen)
  18.06.2011 - 13:43 private Nachricht | Beiträge des Benutzers
  Danke für die schnelle Änderung. Je weiter ich damit herumprobiere, dest beser gefällt es mir.
  Wenn mir noch etwas auffallen sollte melde ich mich natürlich.
  Nach dem Update bin ich gerade über etwas gestolpert. Jetzt wird ja der Monat eingeblendet, wenn es innerhalb des dargestellten Zeitraums einen Wechsel gibt. Allerdings steht der meist auf dem falschen Tag.
  Im BIld sieht man hoffentlich was ich meine. Nimmt man ein anderes Startdatum (Beispiel 22.04.2011) steht 'Mai' auf dem 27. April.
  Dieser Beitrag wurde 1 mal editiert, zum letzten Mal von fod am 20.06.2011 - 22:53 .
  20.06.2011 - 22:44 private Nachricht | Beiträge des Benutzers
  Ah ja, ich weiss was du meinst. Durch eine kleine Änderung konnte ich das beheben. Der Monatsname steht nun etwa in der Mitte des Monats. Vielen Dank für den Hinweis.
  Moderationshinweis von herbivore (30.06.2011 - 08:01:09):
  vorher: Calendar-Control.rar (12,18 KB, 15 mal heruntergeladen)
  21.06.2011 - 22:09 private Nachricht | Beiträge des Benutzers
  Fast schon ein Jahr her, aber ich versuche dennoch mein Glück
  Ich habe mir die DLL runtergeladen und in mein Projekt eingebunden (Visual Studio 2010).
  Jetzt habe ich das Problem, dass wenn ich auf einen Kalendertag klicke das DateSelectionChanged-Event das richtige Datum zurückliefert, im Kalender aber immer der Vortag markiert wird (z.B. ich klicke auf den 10.04., dann wird der 09.04. markiert). Auch in der Funktion myCalendar_DoubleClick steht in myCalendar.SelectedDate der korrekte Wert, aber eingetragen wird der Termin dennoch am Vortag.
  Ich habe eine Form mit einem horizontalen SplitContainer 'scHorizontal', im unteren Panel (Panel2) zwei Buttons (btnCalMonthBack und btnCalNextMonth) und zwei Labels (lblYear und lblSelectedDate).
  namespace RunningDiaryV2
  public partial class frmCalendar : Form
  private CalendarControl.Calendar myCalendar;
  public frmCalendar()
  private void frmCalendar_Load(object sender, EventArgs e)
  myCalendar = new CalendarControl.Calendar();
  myCalendar.Dock = DockStyle.Fill;
  myCalendar.StartDate = DateTime.Now.AddDays(-DateTime.Now.Day);
  lblYear.Text = myCalendar.StartDate.Year.ToString();
  scHorizontal.Panel1.Controls.Add(myCalendar);
  this.myCalendar.DateSelectionChanged += new CalendarControl.Calendar.DateSelectionEventHandler(this.myCalendar_DateSelectionChanged);
  this.myCalendar.MouseDoubleClick += new  MouseEventHandler(this.myCalendar_DoubleClick);
  private void btnCalNextMonth_Click(object sender, EventArgs e)
  myCalendar.StartDate = myCalendar.StartDate.AddMonths(1);
  private void btnCalMonthBack_Click(object sender, EventArgs e)
  myCalendar.StartDate = myCalendar.StartDate.AddMonths(-1);
  private void myCalendar_DateSelectionChanged(DateTime selDateTime)
  lblSelectedDate.Text = selDateTime.ToString();
  private void myCalendar_DoubleClick(object sender, MouseEventArgs e)
  CalendarControl.CalendarItem newItem = new CalendarControl.CalendarItem(myCalendar.SelectedDate, "neuer Eintrag 08/15");
  myCalendar.Items.Add(newItem);
  myCalendar.Refresh();
  Oder hat jemand Beispielcode zur Verwendeung dieses Controls?
  12.04.2012 - 14:25 private Nachricht | Beiträge des Benutzers
  Gibt es ein Tutorial für dieses Control?
  Wie füge ich einen Termin hinzu? Wie speiche ich einen Termin bzw. wie lade ich alle Termin die ich zb. in einer Datenbank gespeichert habe?
  habe es hiermit aus dem vorbeitrag versucht, leider ohne erfolg.
  MessageBox.Show(myCalendar.SelectedDate.ToString());
  gibt nur das tagesdatum, nicht das ausgewählte datum aus :(
  Dieser Beitrag wurde 1 mal editiert, zum letzten Mal von Maffi1986 am 16.12.2013 - 00:25 .
  15.12.2013 - 23:17 private Nachricht | Beiträge des Benutzers
  Ich habe damals den hier aus dem Forum auch getestet und fand aber den von Code-Project besser. Ich hab diesen bei mir schon am laufen, mit speichern/laden der Termine in/aus der DB.
  Vielleicht wirst Du daraus schlauer!?
  16.12.2013 - 21:21 private Nachricht | Beiträge des Benutzers
  Made with ♥ and ASP.NET Core. Rendered in 14.06ms. Running Version 0.1.288+2eb5974a5a on Azure App Service (debian.10-x64 with .NET 5.0.3)