MonthCalender nesnesinin birçok farklı kullanımı ve kullanım ihtiyacından dolayı kendine has özellikleri bulunmaktadır. Tabi ki bunların bir çoğu diğer kontrol sınıflarıyla benzerlik gösterse de biz bu sınıfa ait özellikleri öğrenmeye çalışacağız.
Basit Kullanımı
Evet, Monthcalender sınıfımızı basit kullanımlarla tanımaya başlayalım. Daha sonra bu nesnenin olay (events) ve özelliklerini(properties) detaylı bir şekilde inceleyeceğiz.
Tekil Tarih Seçimi
Bu kullanım örneği, kullanıcıdan sadece tek bir tarih seçmesini istediğimiz zamanlarda kullanırız. Bu örnek için bir adet "Month Calender" kontrolü ve "Button" kontrolüne ihtiyacımız var. Kontrollerimizi ekledikten sonra uygun bir isimlendirme yapıyoruz.Daha sonra kullanıcının birden fazla tarih seçmesini engellemek gerekiyor, bunun için "MonthCalender" nesne özelliklerinden "MaxSelectionCount" sayısını "1" değerine eşitlememiz gerekiyor.
Ardından buton kontrolüne çift tıklayarak, "click" eventini oluşturuyoruz. Bu buton eventini aşağıda ki gibi yazıyoruz.
private void Btn1_Click(object sender, EventArgs e) { MessageBox.Show(monthCalendar1.SelectionStart.ToString("d")); }Kullanıcının seçtiği bilgiyi edinebilmek için nesnesinin "SelectionStart" yada "SelectionEnd"özelliğini kullanıyoruz. Bu özelliklerin geri dönüş türü "Datetime" türünde bir nesnedir. Eğer String türünde bir çıktı almak istiyorsanız, "ToString" metodundan yararlanabilirsiniz...
Ek Bilgi: ToString metodu içinde Gün/Ay/YIL formatı olarak "d" (dd.mm.yyyy) formatı kullanılmıştır.
Birden Fazla Tarih Aralığı Seçimi
Bu kullanım örneğinde ise kullanıcıdan bir veya birden fazla tarihin aynı anda seçilip, nasıl işlendiği anlatılmaktadır.Şimdi örneğimize bir buton daha ekleyerek geliştiriyoruz. Month Calender kontrollerinin yanında seçili tarihlerinin sayısını gösteren buton ile seçili tarihleri listeleyen buton da dahil iki düğmemiz olacak.
Aylık takvimimiz çalışma mantığı oldukça basit; sürükle bırak yöntemi ile kullanıcıdan bir tarih yada belli bir tarih aralığını seçmesi gerekiyor. Seçeceği tarih aralığının uzunluğunu "MaxSelectionCount" özelliği ile belirliyoruz. Bu örneğinde kullanıcının en fazla 1 aylık süreyi yani 31 gün olarak belirliyorum. Siz ihtiyacınıza göre bu gün sayısını değiştirebilirsiniz.
Bu örneğimizin işleyişi temelde önce ki örneğimiz ile aynı mantığa sahip, tek farkı seçilen ilk gün bilgisi ile son gün bilgisine erişmemiz ve buna göre arada ki günleri de hesaplamamız gerekiyor. "Seçili Tarih Sayısı" yazılı butonun üzerinden çift tıklayarak, Click eventi oluşturuyoruz.
private void BtnGoster_Click(object sender, EventArgs e) { string mesaj = "Seçili {0} gün bulunmaktadır."; string gun = string.Format(mesaj, gunFarki() + 1); MessageBox.Show(gun); //MessageBox.Show(monthCalendar1.SelectionRange.ToString()); }Oluşturduğumuz Click Event metoduna yukarıda ki kodu yazıyoruz. Ardından seçili gün sayılarını hesaplayacak olan gunFarki() adlı metodu oluşturmamız gerekiyor.
Not: gunFarki() metodundan dönen değer, çıkarma işleminden dolayı 1 gün eksik hesaplamaktadır. Bu nedenle dönen değere + 1 gün eklenmiştir.
private int gunFarki() { // İki Tarih arasında ki gün sayı farkını buluyoruz. DateTime ilkGun = monthCalendar1.SelectionStart; DateTime sonGun = monthCalendar1.SelectionEnd; TimeSpan gunSayisi = sonGun - ilkGun; return gunSayisi.Days; }Bu metodun çalışma mantığını açıklayacak olursak; Kullanıcının seçmiş olduğu tarih aralığını "SelectionStart" ve "SelectionEnd" özelliklerinde yer alan tarih nesnelerini (DateTime) iki değişkene atamak. Ardından bu değişkenlerin arasında ki farkı hesaplamak için basit bir matematiksel işlem ile son günden, ilk günü çıkarıyoruz ve TimeSpan türünde ki nesnemize atıyoruz. Son olarak bu nesnemizin "Days" özelliği ile toplam kalan gün sayısını integer bir değer olarak geri döndürüyoruz. Eğer bu iki metodu başarılı bir şekilde oluşturdu iseniz, üstte ki resim gibi bir sonuç almanız gerekmektedir.
Örneğimizin ikinci aşaması, ilk gün ve son gün tarihleri de dahil olmak üzere arada ki tarihlerin listelenmesi. Bunun için "Seçili Tarihleri Listele" yazılı butona çift tıklayarak Click eventini oluşturuyoruz.
private void BtnListele_Click(object sender, EventArgs e) { gunleriListele(); }Oluşturduğumuz event metodu içerisine oluşturacağımız gunleriListele() adlı metodu yazıyoruz.
private void gunleriListele() { // Gün Listesini Oluşturma ListOluşturmuş olduğumuz bu metot aslında iki aşamadan oluşuyor. İlk aşaması seçili tarihleri DateTime türünde bir liste nesnesine sırayla eklemesi. Ardından MessageBox nesnesi ile göstereceğimiz için bu nesnenin String türünde listeye dönüştürülerek, MessageBox'da gösterilmesinden oluşuyor. Eğer bu metotları başarılı bir şekilde oluşturduysanız, yukarıda ki resimde ki bir sonuçla karşılaşmanız gerekiyor.gunler = new List (); // Seçili ilk gun belirleniyor. DateTime gun = monthCalendar1.SelectionStart; // İlk günü dahil ederek arada ki günleri listeye ekliyoruz. gunler.Add(gun); for (int i = 0; i < gunFarki(); i++) { gun = gun.AddDays(1); gunler.Add(gun); } // Tarih Listesini Formatlanmış bir şekilde String Listesine Dönüştürüyoruz. List str_gunler = new List (); foreach (var item in gunler) { str_gunler.Add(item.ToString("d")); } // Str_Gunler listesini tek bir string ifadede topluyoruz. String day_list = string.Join("\n", str_gunler.ToArray()); MessageBox.Show(day_list); }
Takvim Üzerinden Kullanıcıya Bilgi Vermek
Bu kullanım örneğinde ise Aylık takvim nesnesinin üzerinde, kayıtlı tarihleri işaretlemek ve bu vesile ile kullanıcıya bilgi vermeyi amaçlamaktayız.Kullanımı oldukça basit olan bu örneğimiz de hafta sonlarını koyu renkle belirteceğiz. Bunu Month Calender kontrollerinin BoldedDates özelliğini kullanarak gerçekleştireceğiz.
private void haftaSonları() { monthCalendar1.BoldedDates = new DateTime[] { new DateTime(2019, 09, 01), new DateTime(2019, 09, 07), new DateTime(2019, 09, 08), new DateTime(2019, 09, 14), new DateTime(2019, 09, 15), new DateTime(2019, 09, 21), new DateTime(2019, 09, 22), new DateTime(2019, 09, 28), new DateTime(2019, 09, 29), }; }İlk olarak hafta sonlarını ifade eden bir metot oluşturuyoruz ve içinde Month Calender nesnesinin "BoldedDates" özelliğine, DateTime türünde bir dizi tarih bilgisi hazırlayıp, eşitliyoruz. Bundan sonra bu metodu kullanmamız gerekiyor. Bunun için;
public Form1() { InitializeComponent(); haftaSonları(); // Örnek için tarih sabitleme monthCalendar1.SelectionRange = new SelectionRange(new DateTime(2019, 09, 20), new DateTime(2019, 09, 20)); }Evet, uygulamamız çalışmaya başlar, başlamaz metodumuzun çalışması için form nesnesinin Kurucu metodunda (Constructor) metodunda çağırıyoruz.
Not: Month Calender kontrolleri varsayılan olarak bugünün tarihini gösterdiği için belirtiğimiz tarihleri görebilmek adına ufak bir tarih seçimi gerçekleştirdim. Bilginize...
Özellikler (Property)
MonthCalender sınıfının sahip olduğu özellikler ve açıklamalarını aşağıda ki listeden takip edebilirsiniz.Özellik Adı | Açıklaması |
---|---|
AnnuallyBoldedDates | Yıllık olarak tarihleri kalın göstermek veya kalın gösterilen tarihlerin bilgisini almaya yarar. DateTime[] dizisi türünde değerler set veya get edilebilir. |
BackColor | Kontrolün arka plan rengini belirlemeye veya öğrenmeye yarar. Color türünde bir değerle set veya get edilebilir. |
BackgroundImage | MonthCalender için arka plan resmi belirlemeye veya almaya yarar. Image türünde bir değerle set veya get edilebilir. |
BackgroundImageLayout | Şuan için açıklaması boş, en kısa zamanda güncellenecek tir. |
BoldedDates | Şuan için açıklaması boş, en kısa zamanda güncellenecek tir. |
CalendarDimensions | Ayları yıllık takvim olarak göstermeye yarar. Size türünde bir değerle set veya get edilebilir. |
CreateParams | Şuan için açıklaması boş, en kısa zamanda güncellenecek tir. |
DefaultImeMode | Şuan için açıklaması boş, en kısa zamanda güncellenecek tir. |
DefaultMargin | Kontrolün varsayılan kenarlarının uzunluk değerini verir. Padding türünde bir değer döndürür. (get) |
DefaultSize | Kontrolün varsayılan boyutunun değerini verir. Size türünde bir değer döndürür.(get) |
DoubleBuffered | Şuan için açıklaması boş, en kısa zamanda güncellenecek tir. |
FirstDayOfWeek | Haftanın ilk gününü belirlemeye yarar. Day türünde bir değerle set veya get edilebilir. |
ForeColor | Şuan için açıklaması boş, en kısa zamanda güncellenecek tir. |
ImeMode | Şuan için açıklaması boş, en kısa zamanda güncellenecektir. |
MaxDate | Şuan için açıklaması boş, en kısa zamanda güncellenecektir. |
MaxSelectionCount | Şuan için açıklaması boş, en kısa zamanda güncellenecektir. |
MinDate | Şuan için açıklaması boş, en kısa zamanda güncellenecektir. |
MonthlyBoldedDates | Şuan için açıklaması boş, en kısa zamanda güncellenecektir. |
Padding | Şuan için açıklaması boş, en kısa zamanda güncellenecektir. |
RightToLeftLayout | Şuan için açıklaması boş, en kısa zamanda güncellenecektir. |
ScrollChange | Şuan için açıklaması boş, en kısa zamanda güncellenecektir. |
SelectionEnd | Şuan için açıklaması boş, en kısa zamanda güncellenecektir. |
SelectionRange | Şuan için açıklaması boş, en kısa zamanda güncellenecektir. |
SelectionStart | Şuan için açıklaması boş, en kısa zamanda güncellenecektir. |
ShowToday | Şuan için açıklaması boş, en kısa zamanda güncellenecektir. |
ShowTodayCircle | Şuan için açıklaması boş, en kısa zamanda güncellenecektir. |
ShowWeekNumbers | Şuan için açıklaması boş, en kısa zamanda güncellenecektir. |
SingleMonthSize | Şuan için açıklaması boş, en kısa zamanda güncellenecektir. |
Size | Şuan için açıklaması boş, en kısa zamanda güncellenecektir. |
Text | Şuan için açıklaması boş, en kısa zamanda güncellenecektir. |
TitleBackColor | Şuan için açıklaması boş, en kısa zamanda güncellenecektir. |
TitleForeColor | Şuan için açıklaması boş, en kısa zamanda güncellenecektir. |
TodayDate | Şuan için açıklaması boş, en kısa zamanda güncellenecektir. |
TodayDateSet | Şuan için açıklaması boş, en kısa zamanda güncellenecektir. |
TrailingForeColor | Şuan için açıklaması boş, en kısa zamanda güncellenecektir. |
Metotlar (Methods)
MonthCalender sınıfının sahip olduğu özellikler ve açıklamalarını aşağıda ki listeden takip edebilirsiniz.Metot Adı (Method) | Açıklaması |
---|---|
AddAnnuallyBoldedDate | Şuan için açıklaması boş, en kısa zamanda güncellenecektir. |
AddBoldedDate | Şuan için açıklaması boş, en kısa zamanda güncellenecektir. |
AddMonthlyBoldedDate | Şuan için açıklaması boş, en kısa zamanda güncellenecektir. |
CreateAccessibilityInstance | Şuan için açıklaması boş, en kısa zamanda güncellenecektir. |
CreateHandle | Şuan için açıklaması boş, en kısa zamanda güncellenecektir. |
DefWndProc | Şuan için açıklaması boş, en kısa zamanda güncellenecektir. |
Dispose | Şuan için açıklaması boş, en kısa zamanda güncellenecektir. |
GetDisplayRange | Şuan için açıklaması boş, en kısa zamanda güncellenecektir. |
HitTest | Şuan için açıklaması boş, en kısa zamanda güncellenecektir. |
IsInputKey | Şuan için açıklaması boş, en kısa zamanda güncellenecektir. |
OnBackColorChanged | Şuan için açıklaması boş, en kısa zamanda güncellenecektir. |
OnDateChanged | Şuan için açıklaması boş, en kısa zamanda güncellenecektir. |
OnDateSelected | Şuan için açıklaması boş, en kısa zamanda güncellenecektir. |
OnFontChanged | Şuan için açıklaması boş, en kısa zamanda güncellenecektir. |
OnForeColorChanged | Şuan için açıklaması boş, en kısa zamanda güncellenecektir. |
OnHandleCreated | Şuan için açıklaması boş, en kısa zamanda güncellenecektir. |
OnHandleDestroyed | Şuan için açıklaması boş, en kısa zamanda güncellenecektir. |
OnRightToLeftLayoutChanged | Şuan için açıklaması boş, en kısa zamanda güncellenecektir. |
RemoveAllAnnuallyBoldedDates | Şuan için açıklaması boş, en kısa zamanda güncellenecektir. |
RemoveAllBoldedDates | Şuan için açıklaması boş, en kısa zamanda güncellenecektir. |
RemoveAllMonthlyBoldedDates | Şuan için açıklaması boş, en kısa zamanda güncellenecektir. |
RemoveAnnuallyBoldedDate | Şuan için açıklaması boş, en kısa zamanda güncellenecektir. |
RemoveBoldedDate | Şuan için açıklaması boş, en kısa zamanda güncellenecektir. |
RemoveMonthlyBoldedDate | Şuan için açıklaması boş, en kısa zamanda güncellenecektir. |
RescaleConstantsForDpi | Şuan için açıklaması boş, en kısa zamanda güncellenecektir. |
SetBoundsCore | Şuan için açıklaması boş, en kısa zamanda güncellenecektir. |
SetCalendarDimensions | Şuan için açıklaması boş, en kısa zamanda güncellenecektir. |
SetDate | Şuan için açıklaması boş, en kısa zamanda güncellenecektir. |
SetSelectionRange | Şuan için açıklaması boş, en kısa zamanda güncellenecektir. |
ToString | Şuan için açıklaması boş, en kısa zamanda güncellenecektir. |
UpdateBoldedDates | Şuan için açıklaması boş, en kısa zamanda güncellenecektir. |
WndProc | Şuan için açıklaması boş, en kısa zamanda güncellenecektir. |
Olaylar (Events)
Sahip olduğu olaylar, açıklamaları ve kullanımlarını aşağıda ki listede açıklamaya çalıştım.Olay Adı (Event) | Açıklaması |
---|---|
BackgroundImageChanged | Şuan için açıklaması boş, en kısa zamanda güncellenecektir. |
BackgroundImageLayoutChanged | Şuan için açıklaması boş, en kısa zamanda güncellenecektir. |
Click | Şuan için açıklaması boş, en kısa zamanda güncellenecektir. |
DateChanged | Şuan için açıklaması boş, en kısa zamanda güncellenecektir. |
DateSelected | Şuan için açıklaması boş, en kısa zamanda güncellenecektir. |
DoubleClick | Şuan için açıklaması boş, en kısa zamanda güncellenecektir. |
ImeModeChanged | Şuan için açıklaması boş, en kısa zamanda güncellenecektir. |
MouseClick | Şuan için açıklaması boş, en kısa zamanda güncellenecektir. |
MouseDoubleClick | Şuan için açıklaması boş, en kısa zamanda güncellenecektir. |
PaddingChanged | Şuan için açıklaması boş, en kısa zamanda güncellenecektir. |
Paint | Şuan için açıklaması boş, en kısa zamanda güncellenecektir. |
RightToLeftLayoutChanged | Şuan için açıklaması boş, en kısa zamanda güncellenecektir. |
TextChanged | Şuan için açıklaması boş, en kısa zamanda güncellenecektir. |
Merhaba, yazınız ilgimi çekti elinize sağlık. Bilmediğimiz sayıda elemanı olan bir listbox nesnesindeki tarih elemanlarına göre takvimdeki ilgili tarihleri bold yapabilir miyiz?
YanıtlaSilMerhabalar, tabi ki yapabilirsiniz. Listbox nesnenizin veya itemlerinizin nasıl oluştuğunu bilmiyorum ama kabaca olması gereken fikir: listbox nesnenizin içeriğini DateTime türünden bir diziye aktararak gerçekleştirebilirsiniz. Google'a "listbox items to array" yazarak bir sürü örnek bulabilirsiniz.
SilMerhaba iki tarih arasındakını iş günlerini bulan bi program yapmam gerekiyor tatil günlerini ben belirliycem nasıl yapabılırım günlerdir işin icinden cıkamadım malesef
YanıtlaSil