hi,
also... wenn es nur um die Darstellung geht, hier mal ein Grundgerüst:
Ist nur ein Ansatz, die Eventhandler fehlen natürlich noch...
Du positionierst ein Label über den MonthCalendar...
MonthCalendar1, Button1
Public Class Form1
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As _
System.EventArgs) Handles Button1.Click
For i As Integer = 1 To 31
AddRedLabel(CDate(i.ToString & ".05.2013"))
Next
End Sub
Private Sub AddRedLabel(ByVal d As Date)
If d.Month = MonthCalendar1.SelectionRange.Start.Month And d.Year = _
MonthCalendar1.SelectionRange.End.Year Then
Dim lbl As New Label
With lbl
.Width = 24
.Height = 15
.ForeColor = Color.White
.BackColor = Color.Red
.Text = d.Day.ToString
.TextAlign = ContentAlignment.MiddleRight
End With
setDate(lbl, CInt(DateToWeek(d).Substring(4, 2)) - CInt(DateToWeek( _
CDate("01." & d.Month.ToString & "." & d.Year)).Substring(4, 2)) _
+ 1, Weekday(d, FirstDayOfWeek.Monday))
MonthCalendar1.Controls.Add(lbl)
End If
End Sub
Private Sub setDate(ByRef lbl As Label, ByVal zeile As Integer, ByVal _
spalte As Integer)
With lbl
.Top = 50 + (lbl.Height * (zeile - 1))
.Left = 2 + (lbl.Width * (spalte - 1))
End With
End Sub
' die folgenden Funktionen stammen aus dem Tipp-Archiv von vb@rchiv.
Public Function DateToWeek(ByVal dDate As Date) As String
' Startdatum der ersten Kalenderwoche des Jahres und Folgejahres
' berechnen
Dim dThisYear As Date = CalendarWeek(1, dDate.Year)
Dim dNextYear As Date = CalendarWeek(1, dDate.Year + 1)
' Prüfen, ob Datum zur ersten Woche des Folgejahres gehört
If dDate >= dNextYear Then
' Rückgabe: KW 1 des Folgejahres
Return dDate.Year + 1 & "01"
ElseIf dDate < dThisYear Then
' Falls das Datum noch zu einer KW aus dem letzten Jahr zählt
Return dDate.Year - 1 & DatePart(DateInterval.WeekOfYear, _
New Date(dDate.Year - 1, 12, 28), FirstDayOfWeek.Monday, _
FirstWeekOfYear.FirstFourDays)
Else
' KW = Differenz zum ersten Tag der ersten Woche
Return dDate.Year & Format$(dDate.Subtract(dThisYear).Days \ 7 + 1, _
"00")
End If
End Function
''' <summary>
''' Ermittelt das Datum einer bestimmten Kalenderwoche
''' eines beliebigen Jahres
''' </summary>
''' <param name="nWeek">Kalenderwoche, zu der das Wochenanfangsdatum
''' ermittelt werden soll</param>
''' <param name="nYear">Jahresangabe</param>
''' <returns>Wochenanfangsdatum (Date)</returns>
''' <remarks></remarks>
Public Function CalendarWeek(ByVal nWeek As Integer, _
ByVal nYear As Integer) As Date
' Wochentag des 4. Januar des Jahres ermitteln
Dim dStart As New Date(nYear, 1, 4)
Dim nDay As Integer = (dStart.DayOfWeek + 6) Mod 7 + 1
' Beginn der 1. KW des Jahres
Dim dFirst As Date = dStart.AddDays(1 - nDay)
' Gesuchte KW ermitteln
Return dFirst.AddDays((nWeek - 1) * 7)
End Function
End Class Mit freundlichen Gr??en
DotNetErbse
[Es hei?t Paket und nicht Packet, auch wenn Standard augenscheinlich von Standar(t)e kommt,hei?t es dennoch Standar(d)] |