PDA

View Full Version : آموزش: تقویم شمسی + DLL



Behnam6670
شنبه 19 مهر 1393, 15:23 عصر
سلام دوستان خسته نباشید

تازه شروع کردم رو یه پروژه دارم کار میکنم برای تقویم شمسی یه فرم طراحی کردم که تقویم شمسی رو مثل یه تقویم برمیگردونه
شما تو این فرم قابلیت انتخاب ماه و سال رو دارید که روزهای متناظر با اون رو تو لیست پر میکنه:چشمک:
از بابت اینکه درست نشون میده یا نه خیالتون راحت باشه چون از کتابخونه های خود دات نت استفاده کردم:لبخند: مگه اینکه دات نت کتابخونه PersianCalender ش اشتباه باشه:قهقهه:

تبدیل به DLL کردم میزارم برا دوستانی که با تقویم شمسی مشکل دارن امیدوارم به دردشون بخوره

حتما اساتید بهتر از من میدونن که برا استفاده از dll میتونن اونو تو رفرنس پروژه اضافه کنید
بعد از اضافه کردن هم کد زیر رو هرجا که خواستید تقویم شمسی رو داشته باشید استفاده کنید


BPersianCalender.shamsiCalander shamsi = new BPersianCalender.PCalander().getshamsiCalander();



کلاس BPersianCalender.shamsiCalander دوتا Property داره به نامهای ShamsiDate و MiladiDate که بعد از اینکه تقویم رو باز کردید و یک روز رو انتخاب کردید مقدار شمسی و میلادی رو به ترتیب برمیگردونن

مثلا من یه button دارم و یه textBox میخوام کلیک کنم و تقویم باز بشه و یک روز رو انتخاب کنم و معادل اون رو تو TextBox برام نشون بده از کد زیر استفاده میکنم





private void button1_Click(object sender, EventArgs e)
{
BPersianCalender.shamsiCalander shamsi = new BPersianCalender.PCalander().getshamsiCalander();
TextBox1.Text = shamsi.ShamsiDate;

}



نوع ShamsiDate به صورت رشته است و MiladiDate هم DateTime

124472


امیدوارم به درد دوستان بخوره و ازش استفاده کنن
راستی نظر یادتون نره
لایسنس:صلوات بر محمد و آل محمد
اگه کسی سورس هم خواست بگه تا براش بدم

امیر مهرشاد
شنبه 19 مهر 1393, 19:12 عصر
124456124457

این خطا رو هنگام اضافه کردن به رفرنس میده

juza66
شنبه 19 مهر 1393, 19:13 عصر
سلام

عالی میشه سورس و آموزش رو هم بذارید


تشکر

اسماعیل ابراهیمی
شنبه 19 مهر 1393, 19:48 عصر
کامپوننت خوبیه ولی یه کم بیشتر به امکانات و قیافه اش اضافه کنید اگه میشه

مزیت اصلی و فعلی کامپوننت شما حجمشه -- حواستون بهش باشه الکی زیاد نشه (چون کامپوننت BehComponent هست و امکانات بیشتری نسبت به کامپوننت شما داره)

من که خودم از کامپوننت شما خیلی خوشم اومد ولی حتما حتما رنگ و لعابش رو بهتر کنید

موفق باشید

Behnam6670
شنبه 19 مهر 1393, 22:21 عصر
از اینکه دوستان لطف کردن و استفاده کردن از کامپوننت تقویم فارسی و نظرشون رو گفتن ممنون و سپاسگذارم
من حقیقتش کلا 2 ساعت رو این کامپوننت وقت گذاشتم از بابت رنگ و لعاب هم که دوستمون اشاره کردن باید بگم بله جا زیاد داره شاید تو نسخه بعدی هم ظاهرش و هم امکاناتش رو عوض کنم

اگه دوستان مایل باشند میتونم هم سورس رو بزارم هم آموزش رو از اول تا آخر ارائه بدم
بازم ممنون
راستی اگه به درد کسی خورد فقط یک صلوات
موفق باشید

Behnam6670
شنبه 19 مهر 1393, 22:31 عصر
124456124457

این خطا رو هنگام اضافه کردن به رفرنس میده

دوست عزیر نباید مشکلی داشته باشه.شما از دات نت چند استفاده میکنید؟

امیر مهرشاد
یک شنبه 20 مهر 1393, 02:57 صبح
دوست عزیر نباید مشکلی داشته باشه.شما از دات نت چند استفاده میکنید؟

3.5 - 4.5 ولی توی 3.5 فقط چک کردم

NASA's Spaceman
یک شنبه 20 مهر 1393, 05:46 صبح
124456124457

این خطا رو هنگام اضافه کردن به رفرنس میده
من هم چند وقت پیش با ویژال 2010 همین مشکل رو داشتم ولی الان که با ویژال 2012 کار میکنم دیگه این مشکل رو ندارم
با سپاس Spaceman

Behnam6670
یک شنبه 20 مهر 1393, 06:42 صبح
این کامپوننت با ویژوال استودیو 2012 تولید شده

Behnam6670
یک شنبه 20 مهر 1393, 08:46 صبح
دوستان من یه تغییر کوچیک تو این کامپوننت دادم و اونو تبدیلش کردم به یه تکست باکس
فقط کافیه شما کامپوننت رو از قسمت ابزارهاتون add کنید یه کامپوننتی به اسم BTextBox به لیست ابزارهاتون اضافه میشه میتونید روش دابل کلیک کنید و بندازید رو فرم
موقع اجرا هم هروقت تو اون TextBox کلید Enter رو بزنید میتونید تاریخ رو انتخاب کنید.
دات نت 3
راستی حجمش رو هم پایینتر اوردم:چشمک:

juza66
یک شنبه 20 مهر 1393, 09:22 صبح
تشکر


فقط میشه اموزش ساخت این کامپونت رو بگید/.
سورس رو نگاه کردم متوجه نشدم چکار کردید میشه سورس خودتون رو بذارید ببینیم چه ها کردید؟!


تشکر ویژه

Behnam6670
یک شنبه 20 مهر 1393, 09:50 صبح
چشم بزودی آموزش ساخت این کامپوننت رو هم میزارم فقط الان یکم سرم شلوغه
البته اگه دوستان زیادی باشن که مایل به آموزش باشن میتونم یه وقت فوق العاده بزارم و آموزشش رو براتون بزارم

Behnam6670
سه شنبه 22 مهر 1393, 18:12 عصر
این کامپوننت با دات نت 3 قابل اجراست

امیر مهرشاد
سه شنبه 22 مهر 1393, 19:00 عصر
چشم بزودی آموزش ساخت این کامپوننت رو هم میزارم فقط الان یکم سرم شلوغه
البته اگه دوستان زیادی باشن که مایل به آموزش باشن میتونم یه وقت فوق العاده بزارم و آموزشش رو براتون بزارم

بی صبرانه منتظر آموزشش هستیم لطفا آموزششو سریع تر شروع کنید

Behnam6670
شنبه 03 آبان 1393, 10:37 صبح
سلام دوستان یه dll جدید از کامپوننت BPersianCalender گذاشتم که به لیست ابزاراتون میتونید این dll رو اضافه کنید
124920
دات نت 3

Behnam6670
شنبه 03 آبان 1393, 10:41 صبح
سلام دوستان یه dll جدید از کامپوننت BPersianCalender گذاشتم که به لیست ابزاراتون میتونید این dll رو اضافه کنید
124920
دات نت 3
اگه وقتی اشاره گر داخل تکست باکس هست Enter رو هم فشار بدید ، تقویم ظاهر میشه
اینم بگم که RightToLeft تکست باکس رو هم Yes کنید:قهقهه:

jir_jir_jir
شنبه 03 آبان 1393, 13:47 عصر
دانلود کردم ببینم اگر خوب بود کارارییش جالب بود با اجازه ات تو برنامه ای دارم می نویسم ازش استفاده می کنم

Behnam6670
شنبه 03 آبان 1393, 14:25 عصر
دانلود کردم ببینم اگر خوب بود کارارییش جالب بود با اجازه ات تو برنامه ای دارم می نویسم ازش استفاده می کنم

لایسنس استفاده ازشو نوشتم
.
.
.
صلوات برمحمد و آل محمد:چشمک:

MMR_1234
یک شنبه 04 آبان 1393, 05:43 صبح
با تشکر از محبتت
آموزش اون چی شد کی منتظر باشیم؟:ناراحت:

Behnam6670
پنج شنبه 15 آبان 1393, 09:06 صبح
سلام خدمت دوستان عزیز
از تاخیری که پیش اومد معذرت میخوام تو این چند روز درگیری یسری کارای شخصی بودم.در هر صورت من طبق قولی که داده بودم میخوام آموزش ساخت این کامپوننتی که گذاشتم رو خدمت دوستان ارائه بدم تا دوستان بتونن خودشون این کامپوننت رو تولید کنن البته اینم بگم متاسفانه من نمیتونم همه آموزش رو یجا ارائه بدم بخاطر مشغله کاری که دارم ولی سعی میکنم هروقت فرصت کردم ادامه آموزش رو از سر بگیریم.
بعد از آموزش ساخت این کامپوننت یه اموزش کوچیک هم میخوام داشته باشم برا دوستانی که با نحوه ذخیره تاریخ تو دیتابیس مشکل دارن و اغلب دوستان نمیدونن که به چه شکل باید تاریخ رو تو دیتابیس ذخیره کنند و تو جستجو هایی که در سطح فرمهاشون انجام میدن چجوری از بازه تاریخی استفاده کنند(اینو گفتم که یجورایی به این کامپوننت مربوط میشه بعدا ربطشو بهتون میگم:چشمک:)

خب با اجازه بزرگترها بریم سر اصل مطلب:لبخند:
آقا اصل مطلب اینه که ما میخوایم یه کامپوننت بسازیم که تاریخ شمسی رو تو پروژه هایی که تحت دانت نت هستن بتونه برا ما مدیریت کنه:تشویق:
که نمونه هاشو دوستان زیاد دیدن(نمونه بارزش هم کنترل های تاریخ تو خود ویژوال استودیو هستش Month Calender,DatePicker)
کامپوننتی که مام میخوایم تولید کنیم یه تکست باکس هستش که کاربر میتونه رو فرمش اضافه کنه و تو اون تقویم شمسی رو نمایش بده که روشهای انتخاب تاریخ به شکلهای مختلف امکان پذیر هستش
مثلا با فشار دادن کلید Enter وقتی که داخل تکست باکس هستش یا از طریق کلیک روی دکمه مربوطه که داخل تکست باکس هستش(آیکون تقویم) و یا اینکه میتونه رو تکست باکس کلیک راست کنه و تاریخ روز رو انتخاب کنه یا تاریخ روز بعد و روز قبل رو هم بتونه انتخاب کنه:متفکر: تصویرشو شما میتونید ببینید
125333
همینطور که توی عکس میبینید این کامپوننت تو این فرم استفاده شده است.منویی که میبینید همونی که بالا خدمتتون عرض کردم(همونی که با کلیک راست روی تکست باکس ظاهر میشه:لبخند:)
خب اینی که تا اینجا دیدید تقریبا نصف کار بود :متفکر:
این آموزش بصورت کلی دو بخش هستش:یه بخش نحوه ساختن فرم تقویم شمسی هستش و یه بخش دیگه آموزش ساخت کامپوننت تکست باکس شمسی هستش که فرم تاریخ شمسی رو نشون میده
من اول نحوه ساختن فرم تقویم شمسی رو خدمت دوستان میگم بعد از اون آموزش ساختن تکست باکس رو خدمت دوستان ارائه میدم.
125334

عکس بالایی هم که میبینید همون فرم تقویم شمسی هستش که بعد از کلیک روی آیکون تقویم داخل تکست باکس باز میشه و شما میتونید تاریخ روز مورد نظرتون رو انخاب کنید
همینطوری که تو این عکس میبینید تاریخ روز بصورت خودکار انتخاب شده است.در قسمت بالای این فرم شما میتونید ماه و سال رو انتخاب کنید و بسته به انتخاب شما روزهای مربوط به اون ماه نشود داده میشه از طریق دکمه های منترلی میتونید ماه و سال رو تغییر بدید.تاریخ انتخاب شده هم به دو صورت شمسی و میلادی نشون داده میشه.دکمه امروز رو اگه بزنید هرجای تقویم که باشید شما رو برمیگردونه به تاریخ روز جاری و دکمه بستن هم که فرم رو میبنده و تاریخ انتخاب شده رو برمیگردونه تو تکست باکس نشون میده.البته هم یتونید رو روز مورد نظر دابل کلیک کنید هم میتونید کلید Enter رو فشار بدید و تقویم بسته بشه.
خب دوستان امروز باز یه بخش دیگه از این آموزش رو سعی میکنم تا آخر وقت براتون بزارم تا انشالله روزهای بعدی آموزش رو تکمیل ترش کنیم
راستی نسخه آخر کامپوننت رو هم براتون میزارم تا دانلودش کنید.در ضمن این کامپوننت سه تا فیلد داره که شما میتونید به اونا دسترسی داشته باشید

Shamsi-Miladi-SelectedDate
Shamsi تاریخ شمسی انتخاب شده مثلا 1393/08/15 نوعش String
Miladi تاریخ میلادی معادل تاریخ شمسی انتخاب شده نوعش DateTime
SelectedDate هم تاریخ شمسی انتخاب شده بدون ممیز 13930815 نوعش هم String

behnamgholipoor
پنج شنبه 15 آبان 1393, 13:19 عصر
سلام دوست عزیز خسته نباشید

کامپوننت جالب و کاربردی هست.
آموزش بعدی کی شروع میشه ؟

Behnam6670
شنبه 17 آبان 1393, 17:40 عصر
سلام دوستان
قسمت دوم آموزش رو میخوام شروع کنم

خب گفتم که آموزش دو قسمت داره
1- روش ساخت فرم تقویم
2- روش ساخت کامپوننت

شروع میکنیم به ساخت فرم تقویم

یه پروژه جدید از نوع WindowsApplication ایجاد کنید (اسم پروژه تون رو هم هرچی دلتون میخواد بدید من دادم BPersianCalender)

Form1 رو به هر نامی اسمشو تغییر بدید که من اسم فرمم رو گذاشتم PCalender

خاصیت های زیر رو برای فرم تنظیم کنید

RightToLeft=True
Font=Tahoma 8pt
Text=تقویم شمسی | تاریخ انتخاب شده :
Siize:341; 253
FormBorderStyle:FixedToolWindow


فرمتون الان باید به شکل زیر باشه

125437

دوتا Button اضافه کنید خاصیت Text رو به ترتیب "امروز" و "بستن" بزارید با یه نامی که براش ست میکنید

چهار تا Button هم اضافه کنید رو فرم برای ماه بعد و قبل و همچنین برا سال بعد و قبل خاصیت Name رو هم براش به ترتیب زیر ست کنید

NextMont-PrevMonth
NextYear-PrevYear

خاصیت Cursor=Hand برای Button های کنترل ماه و سال
تو این مرحله فرم شما باید به شکل زیر باشه


125438

چهار تا Button رو میبینید که من براشون یه تصویری هم استفاده کردم (اینا دیگه سلیقه ای هستش)
دوتا لیبیل "ماه" و "سال" رو هم که میبیند جهت نمایش ماه و سال جاری هستش به ترتیب خاصیت Name رو برابر با lblMounth و lblYaer تعیین کنید

یه Panel اضافه کنید به فرم و توش 7 تا Lable اضافه کنید برای درج اسم روزهای هفته شنبه تا جمعه

125439

روزهای هفته رو میتونید ببینید

مرحله بعدی بدنه اصلی تقویم هستش که روزها قراره تو اون نشون داده بشه

از لیست ابزارهاتون یدونه DataGridView بندازید رو فرم اسمشو بزارید dgCalander و بدون اینکه کاری بکنید وارد فایل Designer فرمتون بشید و کد زیر رو کپی کنید تو قمست Designer

اگه متد زیر رو باز کنید
private void InitializeComponent() میرسید به خط زیر

// // dgCalander
//


کد های مربوط به دیتا گرید رو با کد زیر جایگزین کنید


this.dgCalander.AllowUserToDeleteRows = false;
this.dgCalander.AllowUserToResizeColumns = false;
this.dgCalander.AllowUserToResizeRows = false;
this.dgCalander.AutoSizeColumnsMode = System.Windows.Forms.DataGridViewAutoSizeColumnsMo de.Fill;
this.dgCalander.BorderStyle = System.Windows.Forms.BorderStyle.Fixed3D;
this.dgCalander.CellBorderStyle = System.Windows.Forms.DataGridViewCellBorderStyle.S unken;
this.dgCalander.ColumnHeadersBorderStyle = System.Windows.Forms.DataGridViewHeaderBorderStyle .Sunken;
dataGridViewCellStyle1.Alignment = System.Windows.Forms.DataGridViewContentAlignment. MiddleLeft;
dataGridViewCellStyle1.BackColor = System.Drawing.Color.OliveDrab;
dataGridViewCellStyle1.Font = new System.Drawing.Font("Tahoma", 8F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(178)));
dataGridViewCellStyle1.ForeColor = System.Drawing.Color.Maroon;
dataGridViewCellStyle1.SelectionBackColor = System.Drawing.SystemColors.Highlight;
dataGridViewCellStyle1.SelectionForeColor = System.Drawing.SystemColors.HighlightText;
dataGridViewCellStyle1.WrapMode = System.Windows.Forms.DataGridViewTriState.False;
this.dgCalander.ColumnHeadersDefaultCellStyle = dataGridViewCellStyle1;
this.dgCalander.ColumnHeadersHeightSizeMode = System.Windows.Forms.DataGridViewColumnHeadersHeig htSizeMode.DisableResizing;
this.dgCalander.ColumnHeadersVisible = false;
this.dgCalander.Columns.AddRange(new System.Windows.Forms.DataGridViewColumn[] {
this.c0,
this.c1,
this.c2,
this.c3,
this.c4,
this.c5,
this.c6});
this.dgCalander.Cursor = System.Windows.Forms.Cursors.Default;
dataGridViewCellStyle2.Alignment = System.Windows.Forms.DataGridViewContentAlignment. MiddleCenter;
dataGridViewCellStyle2.BackColor = System.Drawing.SystemColors.Window;
dataGridViewCellStyle2.Font = new System.Drawing.Font("Tahoma", 8F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(178)));
dataGridViewCellStyle2.ForeColor = System.Drawing.SystemColors.ControlText;
dataGridViewCellStyle2.SelectionBackColor = System.Drawing.SystemColors.Highlight;
dataGridViewCellStyle2.SelectionForeColor = System.Drawing.SystemColors.HighlightText;
dataGridViewCellStyle2.WrapMode = System.Windows.Forms.DataGridViewTriState.False;
this.dgCalander.DefaultCellStyle = dataGridViewCellStyle2;
this.dgCalander.Location = new System.Drawing.Point(0, 66);
this.dgCalander.Margin = new System.Windows.Forms.Padding(5, 4, 5, 4);
this.dgCalander.MultiSelect = false;
this.dgCalander.Name = "dgCalander";
this.dgCalander.ReadOnly = true;
this.dgCalander.RowHeadersBorderStyle = System.Windows.Forms.DataGridViewHeaderBorderStyle .Sunken;
this.dgCalander.RowHeadersVisible = false;
this.dgCalander.RowHeadersWidthSizeMode = System.Windows.Forms.DataGridViewRowHeadersWidthSi zeMode.DisableResizing;
this.dgCalander.RowTemplate.DefaultCellStyle.Align ment = System.Windows.Forms.DataGridViewContentAlignment. MiddleCenter;
this.dgCalander.RowTemplate.Height = 18;
this.dgCalander.RowTemplate.ReadOnly = true;
this.dgCalander.RowTemplate.Resizable = System.Windows.Forms.DataGridViewTriState.False;
this.dgCalander.Size = new System.Drawing.Size(323, 97);
this.dgCalander.TabIndex = 0;
this.dgCalander.CellClick += new System.Windows.Forms.DataGridViewCellEventHandler( this.dgCalander_CellClick);
this.dgCalander.CellDoubleClick += new System.Windows.Forms.DataGridViewCellEventHandler( this.dgCalander_CellDoubleClick);
this.dgCalander.CellEnter += new System.Windows.Forms.DataGridViewCellEventHandler( this.dgCalander_CellEnter);
this.dgCalander.KeyDown += new System.Windows.Forms.KeyEventHandler(this.dgCaland er_KeyDown);
//
// c0
//
this.c0.HeaderText = "ش";
this.c0.Name = "c0";
this.c0.ReadOnly = true;
//
// c1
//
this.c1.HeaderText = "1ش";
this.c1.Name = "c1";
this.c1.ReadOnly = true;
//
// c2
//
this.c2.HeaderText = "2ش";
this.c2.Name = "c2";
this.c2.ReadOnly = true;
//
// c3
//
this.c3.HeaderText = "3ش";
this.c3.Name = "c3";
this.c3.ReadOnly = true;
//
// c4
//
this.c4.HeaderText = "4ش";
this.c4.Name = "c4";
this.c4.ReadOnly = true;
//
// c5
//
this.c5.HeaderText = "5ش";
this.c5.Name = "c5";
this.c5.ReadOnly = true;
//
// c6
//
this.c6.HeaderText = "ج";
this.c6.Name = "c6";
this.c6.ReadOnly = true;




اگه به فرم برگردید دیتا گرید رو میبینید که با خصوصیاتی که شما براش در نظر گرفتید طراحی شده!

دیتا گرید رو طوری رو صفحه درگ کنید که هر کدام از ستونها دقیقا زیر روز مربوطه قرار بگیرند
اگه کار رو درست انجام داده باشید فرم شما باید به شکل زیر باشه

125440

دوتا لیبل زیر دیتا گرید اضافه کنید
و تکت هر کدوم رو به ترتیب برابر با تاریخ شمسی و تاریخ میلادی تعیین کنید
جلوی این دوتا لیبیل دو تا لیبل دیگه بندازید که تاریخ شمسی و میلادی انتخاب شده رو نشون میده
اسماشونو بزارید lblShamsi و lblMiladi
خب طراحی فرم ما تموم شده حالا باید بریم سراغ کد نویسی:لبخند:

رو فرم دابل کلیک کنید و کدهای زیر رو قبل از تابع سازنده فرم اضافه کنید
کدهای مربوطi


PersianCalendar pc = new PersianCalendar();//دسترسی به کتابخونه تاریخ شمسی
private DateTime NowDate = DateTime.Now;// نگهدارنده تاریخ میلادی جاری
static int mounthName;//نام ماه
static int YearName;//نام سال
int selectedYear, selectdMonth, selectedDay;//روز-ماه-سال انتخاب شده
int rowIndex, columnIndex;//ایندکس ستون و ایندکس سطر
string selectedShamsiDate;//تاریخ شمسی انتخاب شده
DateTime selectedMiladiDate;//تاریخ میلادی انتخاب شده
shamsiCalander objshamsiCalander = new shamsiCalander();//کلاس نگهدارنده تاریخ



کلاس shamsiCalander رو به صورت زیر داخل فرم اضافه کنید

public class shamsiCalander
{
public string ShamsiDate { get; set; }
public DateTime MiladiDate { get; set; }
}


بعد از InitializeComponent دو خط کد زیر رو اضافه کنید که جهت نگهداری ماه و سال هستش


mounthName = pc.GetMonth(NowDate);
YearName = pc.GetYear(NowDate);




داخل رویداد Load فرم قطعه کد زیر رو اضافه کنید


this.Text += " " + MiladiToShamsi(DateTime.Now);




FillCalander();
FindCurrentDate();
getDates();




این کد جهت درج سطر به دیتا گریدتون هستش که قراره روزهای تقویم رو نگهداری کنند

تابع MiladiToShamsi رو به فرمتون اضافه کنید




public string MiladiToShamsi(DateTime Mdate)
{
string Result = pc.GetYear(Mdate).ToString();
string Month = Convert.ToString(pc.GetMonth(Mdate));
string day = Convert.ToString(pc.GetDayOfMonth(Mdate));
if (Month.Length == 1)
Month = "0" + Month;
if (day.Length == 1)
day = "0" + day;
Result += "/" + Month + "/" + day;
return Result;
}




کار این تابع اینه که شما یه تاریخ میلادی رو بهش پاس میکنید و معادل شمسی اون رو بصورت رشته براتون برمی گردونه

کد زیر رو به قسمت Load فرمتون اضافه کنید

this.Text += " " + MiladiToShamsi(DateTime.Now);


یه متد به نام FindCurrentDate اضافه کنید به صورت زیر



private void FindCurrentDate()
{
int tYear, tMonth, tDay = 0;
tYear = pc.GetYear(DateTime.Now);
tMonth = pc.GetMonth(DateTime.Now);
tDay = pc.GetDayOfMonth(DateTime.Now);
mounthName = tMonth;
YearName = tYear;
lblYear.Text = tYear.ToString();
lblMounth.Text = getMounth(tMonth);
ResetCalender();
FillCalander();
for (int i = 0; i <= 4; i++)
{
for (int x = 0; x < 7; x++)
{
if (dgCalander.Rows[i].Cells["c" + x.ToString()].Value.ToString() == tDay.ToString())
{
dgCalander.ClearSelection();
dgCalander.Rows[i].Cells["c" + x.ToString()].Selected = true;
}
}
}
}


تابع getMounth رو هم به فرم اضافه کنید

private string getMounth(int Mounth)
{
string MounthName = string.Empty;
switch (Mounth)
{
case 1: MounthName = "فروردین";
break;
case 2: MounthName = "اردیبهشت";
break;
case 3: MounthName = "خرداد";
break;
case 4: MounthName = "تیر";
break;
case 5: MounthName = "مرداد";
break;
case 6: MounthName = "شهریور";
break;
case 7: MounthName = "مهر";
break;
case 8: MounthName = "آبان";
break;
case 9: MounthName = "آذر";
break;
case 10: MounthName = "دی";
break;
case 11: MounthName = "بهمن";
break;
case 12: MounthName = "اسفند";
break;
}
return MounthName;
}



خب یکمی از راه رو پیش اومدیم حالا یبار فرمتون رو Run کنید تا ببینید خروجی به چه شکل میشه
به متد FindCurrentDate یکسری کد دیگه بعد قراره اضافه بشه


خب دوستان اگه اشکالی نداشته باشه من باید ادامه آموزش رو بندازم برای روزهای بعد
انشالله اگه این آموزش برا دوستان مفید بوده باشه و دوستان استقبال کنند ادامه آموزش رو تو روزهای بعدی در خدمتتون خواهم بود.
فعلا بای.........

vb341
یک شنبه 18 آبان 1393, 17:58 عصر
انشالله که ادامه داشته باشه

zahra1372
چهارشنبه 21 آبان 1393, 19:23 عصر
سلام اقایBehnam6670 احححححححححسنت:تشویق:
من مبتدی ام اااا نمیخام ایراد الکی بگیرم ولی احساس میکنم از وقتی اینو گذاشتم سرعت برنامه ام اومده پایین! نمیدونم شایدم من توهم زدم ولی در کل دستت درد نکنه عاقا خیلی مرسی(اصن کف کردما، مشخصه؟ :کف::کف::کف::لبخند:)
:قلب:

MahmoodM30
چهارشنبه 21 آبان 1393, 21:41 عصر
سلام دوستان

ممنون میشم دوست عزیز Behnam6670 (http://barnamenevis.org/member.php?244417-Behnam6670) سورس نحوه صفحه بندی دیتاگرید که اینجا تو این تصویر هست رو برام بزارید من خودم با یه روشی ساختم کار میکنه ولی این بنظرم بهتر اومد

http://barnamenevis.org/attachment.php?attachmentid=125333&d=1415252567

Behnam6670
چهارشنبه 21 آبان 1393, 22:40 عصر
سلام اقایBehnam6670 احححححححححسنت:تشویق:
من مبتدی ام اااا نمیخام ایراد الکی بگیرم ولی احساس میکنم از وقتی اینو گذاشتم سرعت برنامه ام اومده پایین! نمیدونم شایدم من توهم زدم ولی در کل دستت درد نکنه عاقا خیلی مرسی(اصن کف کردما، مشخصه؟ :کف::کف::کف::لبخند:)
:قلب:
دوست عزیر این کامپوننت تو چند تا نرم افزار خیلی حرفه ای داره استفاده میشه که تاریخ جز آیتم های خاصش هستش و هیچ مشکلی نداشته تا الان.نه تنها سرعت رو پایین نیاورده بلکه بخاطر حجم فوق العاده پایینش خیلی هم سرعت رو بالا میبره.شاید برا شما دلیل دیگه ای داشته باشه

Behnam6670
چهارشنبه 21 آبان 1393, 22:43 عصر
سلام دوستان

ممنون میشم دوست عزیز Behnam6670 (http://barnamenevis.org/member.php?244417-Behnam6670) سورس نحوه صفحه بندی دیتاگرید که اینجا تو این تصویر هست رو برام بزارید من خودم با یه روشی ساختم کار میکنه ولی این بنظرم بهتر اومد

http://barnamenevis.org/attachment.php?attachmentid=125333&d=1415252567

دوست عزیز شما میتونی از BindingSource استفاده کنی و براش از یه بBindingNavigator استفاده کنی
اینی که میبینی BindingNavigator هستش

zahra1372
پنج شنبه 22 آبان 1393, 09:43 صبح
یه اشکال خییییییییییلیییییییی کوچیک:لبخند:
125586
باز هم تشکرررر خدا خیردون بده:لبخندساده:
بهره بردم:لبخندساده:
اللهم صل علی محمد و ال محمد...
:قلب:

Behnam6670
پنج شنبه 22 آبان 1393, 12:24 عصر
یه اشکال خییییییییییلیییییییی کوچیک:لبخند:
125586
باز هم تشکرررر خدا خیردون بده:لبخندساده:
بهره بردم:لبخندساده:
اللهم صل علی محمد و ال محمد...
:قلب:
سلام
با عرض شرمندگی اینو یادم رفته بردارم:قهقهه::قهقهه::قهقهه:: هقهه:
خودم داشتم تست میکردم مونده
اینی که الان گذاشتم آخرین ورژنه فعلا
رو کلیک راستش یسری ایتم اضافه کردم

zahra1372
پنج شنبه 22 آبان 1393, 15:17 عصر
سلام
با عرض شرمندگی اینو یادم رفته بردارم:قهقهه::قهقهه::قهقهه:: هقهه:
خودم داشتم تست میکردم مونده
اینی که الان گذاشتم آخرین ورژنه فعلا
رو کلیک راستش یسری ایتم اضافه کردم

مرسی دست شما درد نکنهههههه. الان که این جدیدرو استفاده کردم اون مسئله ی پایین اومدن سرعت 1s که گفتم رفع شد!!! خودمم نفهمیدم از چی بود!!!:گیج::لبخند:
بزارین یه نظرم بدم :لبخند: به نظرم بالاش اینطوری باشه بهتره :متفکر:
125594
گزینه های جدیدوووووووووو:قهقهه::لبخن ::قهقهه::متفکر:

Behnam6670
پنج شنبه 22 آبان 1393, 23:18 عصر
خب دوست عزیز اینا یه چیزای سلیقه ای میشه.و میشه به انوع مختلفی تقویم رو طراحی کرد

danialafshari
پنج شنبه 22 آبان 1393, 23:59 عصر
با سلام
مشکلاتی در کامپوننت دیدم گفتم مطرح کنم که برطرفش کنید
البته آخری رو فقط مشاهده کردم
یکی اینکه بعد از select تاریخ 3 رقم اول پشت png مخفی میشن
و بعدی اینکه سطر های گریدتون کافی نیست و وقتی که روز اول از پنجشنبه یا جمعه شروع میشه روز 30 یا 31 ناپدید میشه
مثلا شهریور 1392- شهریور 1387 - شهریور 1386 - مرداد 1394 و ...
موفق باشید

Behnam6670
جمعه 23 آبان 1393, 06:28 صبح
با سلام
مشکلاتی در کامپوننت دیدم گفتم مطرح کنم که برطرفش کنید
البته آخری رو فقط مشاهده کردم
یکی اینکه بعد از select تاریخ 3 رقم اول پشت png مخفی میشن
و بعدی اینکه سطر های گریدتون کافی نیست و وقتی که روز اول از پنجشنبه یا جمعه شروع میشه روز 30 یا 31 ناپدید میشه
مثلا شهریور 1392- شهریور 1387 - شهریور 1386 - مرداد 1394 و ...
موفق باشید
آیتم اولتون که گفتید همونطور که تو عکس زیر میبینید تو حالتی که گفتید مثل تقویم استاندارد 30 و 31 میاد بالا تو ردیف اول قرار میگیره


125612

آیتم دومی هم که فرمودید اگه خاصیت RightToLeft برابر با Yes کنید درست میشد.اینو تو پستای اول هم گفته بودم

Behnam6670
جمعه 23 آبان 1393, 16:33 عصر
سلام دوستان
من میخوام باز یه بخش از آموزش این کامپوننت رو خدمت شما ارئه بدم
از وقفه ای که بین اموزشها پیش میاد از دوستان پوزش میخوام آخه من چون سرکار میرم فقط جمعه هارو میتونم وقت بزارم اونم یه جلسه :قهقهه:

امیدورازم این اموزشا بدرد دوستان بخوره

خب تو جلسه قبل فرم رو طراحی کردیم و ایتم هایی که رو فرم بود رو قرار دادیم.برای قسمت کنترل ماه و سال ما از چهار تا دکمه استفاده کردیم ماه بعد ماه قبل سال بعد و سال قبل
میخوام متدهای مربوط به این دکمه هارو خدمت دوستان بگم که به چه شکل کد نویسیس رو انجام بدید که ماه و سال رو کنترل کنید:لبخند:

خب اول سال
دوتاشم تقریبا به یه شکل کار میکنن البته با یه تفاوت کوچولو.اگه یادتون باشه ما تو جلسه قبل ما تو تابع سازنده فرممون دوتا متغیر رو مقدار دهی کردیم به شکل زیر

mounthName = pc.GetMonth(NowDate);
YearName = pc.GetYear(NowDate);



گفتم که کار این دوتا متغیر نگه داشتن ماه و سال جاری هستش که وقتی فرم لود میشه مقدار دهی میشه

خب روی دکمه سال بعد کلیک کنید و کد زیر رو براش بنویسید

private void btnNextY_Click(object sender, EventArgs e)
{
NextYear();
}

و اینم متد NextYear

private void NextYear()
{
YearName++;
lblYear.Text = YearName.ToString();
}

وهمچنین برای سال قبل از کدهای زیر استفاده کنید

private void btnPrevY_Click(object sender, EventArgs e)
{
PrevYear();

}



private void PrevYear()
{
YearName--;
lblYear.Text = YearName.ToString();
}


حالا فرم رو Run کنید میبینید که براحتی میتونید از طریق دکمه های زیر سال رو کنترل کنید
125632

خب ماه هم به شکل زیر میتونید کدهارو به ماه بعد و قبل اضافه کنید

private void btnNextM_Click(object sender, EventArgs e)
{
if (mounthName >= 12)
{
mounthName = 0;
NextYear();
}
mounthName++;
lblMounth.Text = getMounth(mounthName);

}



و متد کلیک ماه قبل هم به شکل زیر

private void btnPrevM_Click(object sender, EventArgs e)
{
if (mounthName <= 1)
{
mounthName = 13;
PrevYear();
}
mounthName--;
lblMounth.Text = getMounth(mounthName);

}



خب همینطور که میبینید وقتی که شما روی ماه بعد کلیک میکنید وقتی ماه آخر سال میشه که همون مساوی 12 هستش و شما یکبار دیگه اگه روی دکمه ماه بعد کلیک کنید باید سال بعد نشون داده بشه که این مسئله از طریق یه دستور شرطی کنترل شده است و همچنین برعکس این قضیه هستش یعنی وقتی شما دارید ماه قبل رو میزنید تا میرسید به فروردین اگه بواید باز روی ماه قبل کلیک کنید باید یک واحد از سال کم بشه که میبیند تو متد مربوطه کنترل شده
دوستان متد getMounth هم که تو جلسه قبل معرفی کردم که مقدار عددی ماه رو براش ارسال مکنید و معادل رشته رو که همون ماه هستش رو براتون برمیگردونه
یبار فرم رو اجرا کنید و کارکرد کدهای که نوشتید رو ببینید

dashti011
شنبه 24 آبان 1393, 18:01 عصر
سلام ممنون از شما به خاطر ارائه این کامپوننت عالی :)
فقط یه درخواست امکانش هست در پنجره نمایش تاریخ عبارت فارسی "بستن" به "درج" تغییر پیدا کنه !؟

یه مشکل کوچیک هم هست
شما وقتی پنجره تاریخ باز میشه میبینید که پیش فرض روی تاریخ امروز است حالا بیاید سال و ماه را افزایش بدین و روی روز اصلا کلیک نکنید و بر روی دکمه بستن کلیک کنید میبینید که تاریخ امروز ثبت میشه نه تاریخی که ماه و سال آن را افزایش داده ا ید !

Behnam6670
یک شنبه 25 آبان 1393, 06:53 صبح
سلام
آره درج هم خوبه
اون آیتمی هم که گفتی چک میکنم دوست عزیز:متفکر:

Behnam6670
یک شنبه 25 آبان 1393, 09:03 صبح
یکی از دوستان یه مسئله ای رو پیشنهاد دادن که بد نبود من اونو اعمال کردم و بغیر از اون هم یه تغییراتی تو کامپوننت دادم اونم اینه که شما وقتی روی اسم ماه کلیک میکنید لیست کل ماههای سال براتون باز میشه و میتونید یکی از ماهها رو انتخاب کنید و همچنین برای سال هم به همین شکل هستش که وقتی رو اسم سال کلیک میکنید لیست 12 سال براتون نشون داده میشه که شما میتونید سال رو انتخاب کنید همچنین از طریق دکمه هایی که تو این لیست هست شما میتونید سالهای بعدی و قبلی رو ببینید و انتخاب کنید.
در ضمن یکی از دوستان گفته بودن که وقتی تو فرم اصلی ماه یا سال رو عوض میکنی و بعد دکمه بستن رو انتخاب میکنی تاریخ جاری رو نشون میده که اونم اصلاح شده
امیدوارم دوستان استفاده بکنن:بوس::بوس::چشمک:

125744

125745

فقط کافی رو لیست کلیک کنید:بوس:

moharam1370
یک شنبه 25 آبان 1393, 09:23 صبح
سلام ، اگه بشه فونتش تغییر داد خیلی جالب میشد ...
البته یه نظره ...

dashti011
یک شنبه 25 آبان 1393, 11:38 صبح
ممنون اقا بهنام اما کو لینک دانلود ؟!! :قهقهه:

یه پیشنهاد البته اگه امکانش باشه ، میشه یه نوع خروجی تعریف بشه تا اگه کاربری تاریخ 1393/08/20 را انتخاب کرد یه خروجی کامپوننت هم باشه به صورت" 20 آبان 1393 " البته با چند خط کد میشه اجرا کرد گفتم جز خروجی کامپوننت باشه جالب میشه :) البته یه پیشنهاده

باتشکر :)

Behnam6670
یک شنبه 25 آبان 1393, 12:11 عصر
ممنون اقا بهنام اما کو لینک دانلود ؟!! :قهقهه:

یه پیشنهاد البته اگه امکانش باشه ، میشه یه نوع خروجی تعریف بشه تا اگه کاربری تاریخ 1393/08/20 را انتخاب کرد یه خروجی کامپوننت هم باشه به صورت" 20 آبان 1393 " البته با چند خط کد میشه اجرا کرد گفتم جز خروجی کامپوننت باشه جالب میشه :) البته یه پیشنهاده

باتشکر :)
اینم لینک دانلود

silver189
یک شنبه 25 آبان 1393, 13:29 عصر
سلام
آیا امکان داره سورس شما رو داشته باشیم ؟

momimomi
دوشنبه 26 آبان 1393, 15:56 عصر
سلام دوست عزیز
بسیار ممنون از آموزش این کامپوننت مهم و کاربردی
اگه میشه آموزشها رو همراه با سورس بذارید:تشویق:

momimomi
دوشنبه 26 آبان 1393, 18:18 عصر
سلام
یه سوال دیگه
روزهای شنبه 1 شنبه، 2شنبه و ... را که تایپ می کنم میخواهم مثل شما اعدادش فارسی باشه، چیکار کنم؟:عصبانی++:

moharam1370
یک شنبه 02 آذر 1393, 09:44 صبح
سلام ، در این کامپوننت روز مشخص شده رو رنگشو به سبز تغییر دادم ، حالا اگر بخوام یه سلول خاص رو سلکت کنم ، چه کدی باید بنویسم ؟

125957

Behnam6670
یک شنبه 02 آذر 1393, 13:04 عصر
سلام
آیا امکان داره سورس شما رو داشته باشیم ؟
دوست عزیز اموزشها که تموم شد سورس کامل رو میزارم براتون

Behnam6670
یک شنبه 02 آذر 1393, 13:05 عصر
سلام ، در این کامپوننت روز مشخص شده رو رنگشو به سبز تغییر دادم ، حالا اگر بخوام یه سلول خاص رو سلکت کنم ، چه کدی باید بنویسم ؟


این کنترلی که شما استفاده کردی چی هستش؟؟؟همینی که اعداد 1 تا 30 رو توش نشون دادی؟؟اگه گرید ویو هستش براحتی میتونی سلول انتخاب شده رو مقدارشو برگردونی

Behnam6670
یک شنبه 02 آذر 1393, 13:26 عصر
سلام دوستان بازم معذرت میخوام از بابت تاخیر بوجود آمده جهت آموزش

چون وقتم کمه این جلسه اون قلب کار رو میخوام خدمت دوستان بگم تا بقیش بمونه باز برا بعد

دوتا متد مهم داریم که به شکل زیر

ResetCalender
FillCalender

متد اول کارش اینه که میاد کل لیست رو خالی میکنه(پاک میکنه) و بعد از خالی شدن متد دوم میاد لیست رو بر اساس ماه و سالی که انخاب میکنید پر میکنه


private void ResetCalender()
{
for (int i = 0; i <= 4; i++)
{
for (int x = 0; x < 7; x++)
{
dgCalander.Rows[i].Cells["c" + x.ToString()].Value = "";
}
}
}



private void FillCalander()
{
columnIndex = dgCalander.CurrentCell.ColumnIndex;
rowIndex = dgCalander.CurrentCell.RowIndex;
int DayOfWeekNameInMonth = 0;
int daysInMonth = pc.GetDaysInMonth(YearName, mounthName);//پیدا کردن تعدا روزهای ماه انتخاب شده


for (int i = 1, d = 1, j = 0; i <= 5; i++, j++)
{
if (d == daysInMonth)
{
break;
}
for (int x = 1; x <= 7; x++, d++)
{
DateTime dtt = pc.ToDateTime(YearName, mounthName, d, 1, 1, 1, 1, 1);
/////////////این قسمت جهت پیدا کردن اولین روز ماه استفاده میشه که مشخص میکنه اولین روز ماه از چه روزی شروع میشه
#region MyRegion
switch (pc.GetDayOfWeek(dtt))
{
case DayOfWeek.Saturday: DayOfWeekNameInMonth = 0;
break;
case DayOfWeek.Sunday: DayOfWeekNameInMonth = 1;
break;
case DayOfWeek.Monday: DayOfWeekNameInMonth = 2;
break;
case DayOfWeek.Tuesday: DayOfWeekNameInMonth = 3;
break;
case DayOfWeek.Wednesday: DayOfWeekNameInMonth = 4;
break;
case DayOfWeek.Thursday: DayOfWeekNameInMonth = 5;
break;
case DayOfWeek.Friday: DayOfWeekNameInMonth = 6;
break;
}
#endregion


dgCalander.Rows[j].Cells["c" + DayOfWeekNameInMonth.ToString()].Value = pc.GetDayOfMonth(dtt);
if (DayOfWeekNameInMonth == 6)
{
dgCalander.Rows[j].Cells["c" + DayOfWeekNameInMonth.ToString()].Style.ForeColor = Color.Red;
}
if (DayOfWeekNameInMonth == 6)
{
d++;
break;


}
if (d == daysInMonth)
{
break;
}
}
}


//////////////////// از اینجا به بعد زمانی استفاده میشود که ماه 31 روزه یا 30 روزه باشد و شروع ماه از جمعه باشد(آخر خانه سط اول)
/////////////////// که میاد به خونه های اول سطر یک اعداد رو اضافه میکنه
int lastRowData = 0;
if (dgCalander.Rows[4].Cells["c6"].Value != null)
{
if (!string.IsNullOrEmpty(dgCalander.Rows[4].Cells["c6"].Value.ToString()))
{
lastRowData = int.Parse(dgCalander.Rows[4].Cells["c6"].Value.ToString());
}


}
if (lastRowData != 31 && lastRowData != 0)
{
if (daysInMonth >= 29 && lastRowData >= 29)
{
int RemainDay = daysInMonth - lastRowData;
for (int i = 0; i < RemainDay; i++)
{
dgCalander.Rows[0].Cells["c" + i.ToString()].Value = ++lastRowData;
}
}


}
FindCurrentCell();//بعد از پر کردن لیست روز جاری با این متد پیدا میشه
}



خب دوستان میتونید کد های این دوتا متد رو ببینید که یکسری توضیحات براش نوشتم.مهمترین قسمتهای این کد رو جلوی خطهاش توضیح دادم
تعداد روزهای ماه-روز اول ماه-نمایش 30 و 31 در سطر اول در صورت جا نشدن در سطر آخر


بعد از اینکه این دوتا متد رو اضافه کردید بصورت زیر عمل کنید:

متد FillCalender رو رویداد Load فرمتون اضافه کنید

و متدهای زیر رو به همین صورتی که میبینید به رویداد کلیک ماه بعد-ماه قبل- و سال بعد سال قبل اضافه کنید

مثال:

برای سال بعد


private void btnNextY_Click(object sender, EventArgs e)
{
NextYear();
ResetCalender();
FillCalander();

}





دقت کنید که متد های کنترل ماه و سال رو تو جلسات قبل گفته بودم و این دوتا خط رو هم بهشون اضافه کنید

اول تقویم خالی میشه بعد پر میشه

خب یه متد هم مونده که میاد روز جاری رو پیدا میکنه و مقادیر رو مقدار دهی میکنه به شکل زیر


private void FindCurrentCell()
{
if (dgCalander.CurrentCell.Value != null)
{
try
{
if (!string.IsNullOrEmpty(dgCalander.CurrentCell.Valu e.ToString()))
{
this.Text = null;
selectedDay = int.Parse(dgCalander.CurrentCell.Value.ToString()) ;
selectdMonth = mounthName;
selectedYear = YearName;
selectedShamsiDate = selectedYear.ToString() + "/" +
(selectdMonth.ToString().Length == 1 ? "0" + selectdMonth.ToString() : selectdMonth.ToString()) + "/" +
(selectedDay.ToString().Length == 1 ? "0" + selectedDay.ToString() : selectedDay.ToString());
this.Text = "تقویم شمسی | تاریخ انتخاب شده : " + selectedShamsiDate;
selectedMiladiDate = pc.ToDateTime(selectedYear, selectdMonth, selectedDay, 0, 0, 0, 0);
lblShamsi.Text = selectedShamsiDate;
lblMiladi.Text = selectedMiladiDate.ToShortDateString();


}
else
{
selectedDay = 0;
selectdMonth = 0;
selectedYear = 0;
lblShamsi.Text = null;
lblMiladi.Text = null;
selectedShamsiDate = null;
selectedMiladiDate = new DateTime();
this.Text = "تقویم شمسی | تاریخ انتخاب شده : " + selectedShamsiDate;
}
}
catch (Exception)
{
return;
}

}


}



خب دوستان حالا وقتش رسیده فرمتون رو Run کنید اگه مراحل رو از اول آموزش درست رفته باشید باید بتونید تقویم رو کامل داشته باشید.
ادامه آموزش با اجازه اساتید بمونه برای روزهای بعد

خوش باشید.........:چشمک:



خواهشا دوستان اگه کسی احساس کرد این مطالب به دردش میخوره صلوات یادش نره ممنون

moharam1370
یک شنبه 02 آذر 1393, 13:55 عصر
این کنترلی که شما استفاده کردی چی هستش؟؟؟همینی که اعداد 1 تا 30 رو توش نشون دادی؟؟اگه گرید ویو هستش براحتی میتونی سلول انتخاب شده رو مقدارشو برگردونی

مقدارشور لازم ندارم ، می خوام سلکتش کنم ، مثل روز شنبه یکم .

pesare
یک شنبه 02 آذر 1393, 15:19 عصر
سلام دوست عزیز
کامپوننت شما به کاربر اجازه میده که تاریخ رو بصورت "YYYY/MM/dd hh:mm" انتخاب کنه؟
یعنی علاوه بر Date از Time هم پشتیبانی کنه؟

Behnam6670
یک شنبه 02 آذر 1393, 16:59 عصر
سلام دوست عزیز
کامپوننت شما به کاربر اجازه میده که تاریخ رو بصورت "YYYY/MM/dd hh:mm" انتخاب کنه؟
یعنی علاوه بر Date از Time هم پشتیبانی کنه؟

سلام
نه تایم رو نداره

moharam1370
یک شنبه 02 آذر 1393, 17:44 عصر
همچنان منتظر سلکت کردن یه سلول هستم ...

moharam1370
دوشنبه 03 آذر 1393, 10:11 صبح
دنبال این دستور می گشتم


View_Calander.ClearSelection();
View_Calander.Rows[شماره سطر].Cells[شماره ستون].Selected = true;


منبع:
http://stackoverflow.com/questions/4918904/datagridview-focus-a-specific-cell

Behnam6670
دوشنبه 03 آذر 1393, 13:23 عصر
دنبال این دستور می گشتم


View_Calander.ClearSelection();
View_Calander.Rows[شماره سطر].Cells[شماره ستون].Selected = true;


منبع:
http://stackoverflow.com/questions/4918904/datagridview-focus-a-specific-cell
دوست عزیز این دستور رو تو کدهای قبلی من گذاشته بودم

moharam1370
دوشنبه 03 آذر 1393, 13:52 عصر
دوست عزیز این دستور رو تو کدهای قبلی من گذاشته بودم

پیدا نکردم ...

silver189
دوشنبه 03 آذر 1393, 15:16 عصر
دوست عزیز سلام
من طبق آموزش شما پیش رفتم ولی یک مشکلی که دارم اینکه بعد از لود فرم تاریخ فعلی که (مثلا 1393/09/03) رو نوار ابزار هست درسته ولی تاریخ که در دیتا گرید هست اولین روز ماه ( 1393/09/01 ) می باشد . لطفا راهنمایی کنید ممنون می شم .

Behnam6670
دوشنبه 03 آذر 1393, 17:46 عصر
دوست عزیز سلام
من طبق آموزش شما پیش رفتم ولی یک مشکلی که دارم اینکه بعد از لود فرم تاریخ فعلی که (مثلا 1393/09/03) رو نوار ابزار هست درسته ولی تاریخ که در دیتا گرید هست اولین روز ماه ( 1393/09/01 ) می باشد . لطفا راهنمایی کنید ممنون می شم .

دوست عزیز رویداد Load فرمت و متد FindCurrentDate باید به شکل زیر باشه چک کن ببین درسته یا نه؟


private void frmCalander_Load(object sender, EventArgs e)
{
//Create Rows
for (int i = 0; i < 4; i++)
{
dgCalander.Rows.Add();
}


this.Text += " " + MiladiToShamsi(DateTime.Now);




FillCalander();
FindCurrentDate();
getDates();




}


private void getDates()
{
lblShamsi.Text = MiladiToShamsi(DateTime.Now);
lblMiladi.Text = DateTime.Now.ToShortDateString();
}


private void FindCurrentDate()
{
int tYear, tMonth, tDay = 0;
tYear = pc.GetYear(DateTime.Now);
tMonth = pc.GetMonth(DateTime.Now);
tDay = pc.GetDayOfMonth(DateTime.Now);
mounthName = tMonth;
YearName = tYear;
lblYear.Text = tYear.ToString();
lblMounth.Text = getMounth(tMonth);
ResetCalender();
FillCalander();
for (int i = 0; i <= 4; i++)
{
for (int x = 0; x < 7; x++)
{
if (dgCalander.Rows[i].Cells["c" + x.ToString()].Value.ToString() == tDay.ToString())
{
dgCalander.ClearSelection();
dgCalander.Rows[i].Cells["c" + x.ToString()].Selected = true;
}
}
}
}

silver189
سه شنبه 04 آذر 1393, 09:11 صبح
آقا ممنون کارم راه افتاد

silver189
سه شنبه 04 آذر 1393, 12:02 عصر
فقط یک سئوال شما در dll خودتون getshamsiCalander استفاده کردید . این متد رو هم اگه بگید ممنون می شم

Behnam6670
سه شنبه 04 آذر 1393, 14:27 عصر
فقط یک سئوال شما در dll خودتون getshamsiCalander استفاده کردید . این متد رو هم اگه بگید ممنون می شم
getshamsiCalander یه متد هستش که تاریخ انتخاب شده رو برمیگردونه دو تا مقدار برمیگردونه تاریخ شمسی و تاریخ میلادی میتونید یه نمونه ازShamsiCalander رو بسازید تا به این متد دسترسی پیدا کنید به صورت زیر

BPersianCalender.shamsiCalander shamsi = new BPersianCalender.PCalander().getshamsiCalander();
TextBox1.Text = shamsi.ShamsiDate;

nwdent
سه شنبه 04 آذر 1393, 16:00 عصر
با سلام

من برای یک پروژه بومی‌سازی دقیقا دنبال همین تاریخ شمسی هستم.

می‌خواستم ببینم امکان داره به نحوی تقویم شمسی رو جایگزین Calendar ویندوز در یک پروژه #C کرد؟‌

ممنون میشم اگر راهنمایی کنید.

Behnam6670
سه شنبه 04 آذر 1393, 16:10 عصر
با سلام

من برای یک پروژه بومی‌سازی دقیقا دنبال همین تاریخ شمسی هستم.

می‌خواستم ببینم امکان داره به نحوی تقویم شمسی رو جایگزین Calendar ویندوز در یک پروژه #C کرد؟‌

ممنون میشم اگر راهنمایی کنید.

دوست عزیز شما میتونی از این تقویم هرجای پروژت استفاده کنی و تقویم شمسی رو کاملا در اختیار داری

silver189
سه شنبه 04 آذر 1393, 16:53 عصر
getshamsiCalander یه کلاس هستش که تاریخ انتخاب شده رو برمیگردونه دو تا مقدار برمیگردونه تاریخ شمسی و تاریخ میلادی میتونید یه نمونه ازش رو بسازید تا به مقادیرش دسترسی پیدا کنید

میشه کد کلاسش رو بزارید یا مثل همون کلاس shamsiCalander هستش ؟

Behnam6670
سه شنبه 04 آذر 1393, 17:25 عصر
میشه کد کلاسش رو بزارید یا مثل همون کلاس shamsiCalander هستش ؟

دوست عزیز پستهای بالارو چک کن اصلاحش کردم

silver189
چهارشنبه 05 آذر 1393, 09:36 صبح
getshamsiCalander یه متد هستش که تاریخ انتخاب شده رو برمیگردونه دو تا مقدار برمیگردونه تاریخ شمسی و تاریخ میلادی میتونید یه نمونه ازShamsiCalander رو بسازید تا به این متد دسترسی پیدا کنید به صورت زیر

BPersianCalender.shamsiCalander shamsi = new BPersianCalender.PCalander().getshamsiCalander();
TextBox1.Text = shamsi.ShamsiDate;


دوست عزیز من هر کاری می کنم این getshamsiCalander رو نمی تونم صدا بزنم . می تونید بیشتر توضیح بدید ؟

Behnam6670
چهارشنبه 05 آذر 1393, 11:18 صبح
دوست عزیز من هر کاری می کنم این getshamsiCalander رو نمی تونم صدا بزنم . می تونید بیشتر توضیح بدید ؟

نباید مشکلی داشته باشه اگه nameSpace رو add کرده باشید.در ضمن شما dll رو به ابزارات اضافه کن و اونو بنداز رو فرمت تموم .همین

silver189
چهارشنبه 05 آذر 1393, 11:47 صبح
سلام
من طبق اموزش شما با سلیقه شخصی دارم یک dll مثل کاری که شما کردید رو می سازم اون هم به صورت آماتور .
حالا تمام مراحل رو که فرمودید پیش رفتم و کامپونتم تقریبا تموم شده است .

126045

حالا من 2 تا مشکل دارم یکی اینکه هنوز نفهمیدم اون متد getshamsiCalander رو کجا استفاده کردید و یکی دیگه اینکه با بستن فرم یا دبل کلیک روی دیتاگرید چگونه اطلاعات انتقال پیدا می کنه ؟
ممنون اگه به صورت آماتوری برام توضیح بدید ؟

Behnam6670
چهارشنبه 05 آذر 1393, 13:32 عصر
سلام
من طبق اموزش شما با سلیقه شخصی دارم یک dll مثل کاری که شما کردید رو می سازم اون هم به صورت آماتور .
حالا تمام مراحل رو که فرمودید پیش رفتم و کامپونتم تقریبا تموم شده است .

126045

حالا من 2 تا مشکل دارم یکی اینکه هنوز نفهمیدم اون متد getshamsiCalander رو کجا استفاده کردید و یکی دیگه اینکه با بستن فرم یا دبل کلیک روی دیتاگرید چگونه اطلاعات انتقال پیدا می کنه ؟
ممنون اگه به صورت آماتوری برام توضیح بدید ؟

سلیقه ات قشنگه:تشویق:

تو آموزش بعدی میگم که چطوری از این کامپوننت رو تکمیلترش بکنی.نصف راه رو رفتی مونده نصف دیگش:تشویق:

nwdent
جمعه 07 آذر 1393, 00:06 صبح
دوست عزیز شما میتونی از این تقویم هرجای پروژت استفاده کنی و تقویم شمسی رو کاملا در اختیار داری

سلام. ممنون از اینکه پاسخگو بودید. شما خودتون ممکنه یه ارزیابی از پروژه بکنید و سوار کردن تقویم شمسی روی تقویم ویندوز رو تو این مورد خاص اجرایی کنید؟ جزئیات رو با پیغام خصوصی فرستادم. ممنون.

silver189
دوشنبه 10 آذر 1393, 08:50 صبح
سلام
ما همچنان منتظر ادامه آموزش شما هستیم

zahra1372
پنج شنبه 13 آذر 1393, 13:02 عصر
سلام با تشکر از وقتی که میزارین
ولی کاش زودتر در مورد جستجو در بازه زمانی توضیح میدادین:افسرده:

silver189
دوشنبه 17 آذر 1393, 08:57 صبح
سلام ، آقا ما همچنان منتظر ادامه آموزش هستیم

Behnam6670
دوشنبه 17 آذر 1393, 10:02 صبح
سلام با تشکر از وقتی که میزارین
ولی کاش زودتر در مورد جستجو در بازه زمانی توضیح میدادین:افسرده:
سلام دوست عزیز
این کامپوننتی که من گذاشتم یه Properties به نام SelectedDate داره که تاریخ انتخاب شده بدون ممیز رو توش نگه میداره به صورت زیر
1393/09/17 >>13930917

ما نمیتونیم تاریخ رو به صورت رشته ای بیایم جستجو کنیم یا باید بصورت DateTime باشه یا Int تا بتونیم بصورت بازه جستجو کنیم.

شما از طریق ای SelectedDate میتونی تاریخ رو بصورت عدد تو یه بازه جستجو کنی.
من تو پروژه هام از این کامپننتی که نوشتم خیلی راحت استفاده میکنم تاریخ رو بصورت رشته ای تو دیتابیسم ذخیره میکنم مثلا "1393/09/17" و جستجوم رو براحتی روی این رشته بصورت زیر میام انجام میدم. برای این منظور:


public static SMIODataClassDataContext db = new SMIODataClassDataContext();

SMIODataClassDataContext اسم کانتکست LINQ هستش که توی Program تعریف کردم و دسترسیش توی همه فرمها بصورت Global شده.

var Query = from p in Program.db.tblSMIOPersons
select new
{
p.fIdentity,
p.fName,
p.fFamily,
fEmpDate = p.fEmpDateS,// یه متغیری هستش که تاریخ انتخاب شده رو بصورت همون استاندارد رشته ای نگهداری میکنه1393/09/17 fEmpDate
fEmpDateS = Convert.ToInt64(p.fEmpDateS.Replace("/", "")),//تو این خط ممیزها حذف میشن و تاریخ تبدیل میشه به یه عدد
};
Query = Query.Where(c => c.fEmpDateS >= Convert.ToInt64(dateF.SelectedDate) && c.fEmpDateS <= Convert.ToInt64(dateE.SelectedDate));




کوری ساخته میشه و بازه تاریخ برای جستجو اعمال میشه.dateF و dateE دوتا کامپوننت تاریخ روی فرمم هستش
موفق باشید.

Behnam6670
سه شنبه 18 آذر 1393, 07:41 صبح
سورس کامل کامپوننت تقویم شمسی BPersianCalender و DLL
http://barnamenevis.org/showthread.php?478618-%D8%B3%D9%88%D8%B1%D8%B3-%DA%A9%D8%A7%D9%85%D9%84-%DA%A9%D8%A7%D9%85%D9%BE%D9%88%D9%86%D9%86%D8%AA-%D8%AA%D9%82%D9%88%DB%8C%D9%85-%D8%B4%D9%85%D8%B3%DB%8C-BPersianCalender-%D9%88-DLL

zahra1372
جمعه 21 آذر 1393, 12:26 عصر
سلام دوست عزیز
این کامپوننتی که من گذاشتم یه Properties به نام SelectedDate داره که تاریخ انتخاب شده بدون ممیز رو توش نگه میداره به صورت زیر
1393/09/17 >>13930917

ما نمیتونیم تاریخ رو به صورت رشته ای بیایم جستجو کنیم یا باید بصورت DateTime باشه یا Int تا بتونیم بصورت بازه جستجو کنیم.

شما از طریق ای SelectedDate میتونی تاریخ رو بصورت عدد تو یه بازه جستجو کنی.
من تو پروژه هام از این کامپننتی که نوشتم خیلی راحت استفاده میکنم تاریخ رو بصورت رشته ای تو دیتابیسم ذخیره میکنم مثلا "1393/09/17" و جستجوم رو براحتی روی این رشته بصورت زیر میام انجام میدم. برای این منظور:


public static SMIODataClassDataContext db = new SMIODataClassDataContext();

SMIODataClassDataContext اسم کانتکست LINQ هستش که توی Program تعریف کردم و دسترسیش توی همه فرمها بصورت Global شده.

var Query = from p in Program.db.tblSMIOPersons
select new
{
p.fIdentity,
p.fName,
p.fFamily,
fEmpDate = p.fEmpDateS,// یه متغیری هستش که تاریخ انتخاب شده رو بصورت همون استاندارد رشته ای نگهداری میکنه1393/09/17 fEmpDate
fEmpDateS = Convert.ToInt64(p.fEmpDateS.Replace("/", "")),//تو این خط ممیزها حذف میشن و تاریخ تبدیل میشه به یه عدد
};
Query = Query.Where(c => c.fEmpDateS >= Convert.ToInt64(dateF.SelectedDate) && c.fEmpDateS <= Convert.ToInt64(dateE.SelectedDate));




کوری ساخته میشه و بازه تاریخ برای جستجو اعمال میشه.dateF و dateE دوتا کامپوننت تاریخ روی فرمم هستش
موفق باشید.

سلام
من با استور پروسیجر مینویسم.. ولی مرسی اصل مطلبو گرفتم و بهره بردم :VeryHappy:
خودم اصلا به جستجو در بازه زمانی فکر نکرده بودم :خجالت:، راحت تر از چیزیه که فک میکردم
خیلی ممنون :لبخندساده:

ghasem110deh
یک شنبه 23 آذر 1393, 21:59 عصر
حاجی واسه من اجرا نمیشه ...
هیچی نیست ... ولی فایل exe برنامه اجرا میشه !

Behnam6670
دوشنبه 24 آذر 1393, 06:45 صبح
نباید مشکلی داشته باشید چون دوستان زیادی استفاده کردند و به مشکلی بر نخوردند.با دقت انجام بدید:متفکر:

sajaaaaad
شنبه 16 اسفند 1393, 16:03 عصر
آقا بهنام مرسی خیلی عالی بود. من واقعا مشکل داشتم با این تقویما، چندتا کامپونتت پیدا کردم ولی نمیدونم چرا ادد نمیشد به پروژم. بازم مرسی.
حالت کمبوباکسشم بذاری دیگ خیلی عالی میشه :لبخند: دمت گرم.
با تشکر.

mortezagtx
پنج شنبه 01 بهمن 1394, 11:19 صبح
سلام ممنون خیلی عالیه

m.webgard
پنج شنبه 08 بهمن 1394, 20:16 عصر
سلام
وقت بخیر
ممنونم از کامپوننت خوبتون
من این کامپوننت رو روی صفحه گذاشتم اما موقع اجرا خطا میده. ممنون میشم راهنمایی کنید
تشکر
138709

momimomi
جمعه 09 بهمن 1394, 17:15 عصر
من از کامپوننت استفاده کردم خیلی خوبه ولی یه پیغام warning به شکل زیر دارم:

138727

aryana25000
پنج شنبه 26 دی 1398, 22:07 عصر
میشه این کامپوننت رو بصورت poup طراحی کرد که در مختصات موس باز بشه و یکم لایت تر باشه