PDA

View Full Version : کنترل انتخاب تاریخ و زمان با پشتیبانی از تاریخ شمسی و میلادی - open-source



plus
شنبه 04 بهمن 1393, 18:47 عصر
همونطور که میدونید، برای حل مشکل انتخاب و نمایش تاریخ با تقویم فارسی، کنترل‌‌های مختلفی توسط توسعه دهنده‌های ایرانی برای WinForms ساخته شده. من خیلی از اون‌‌ها رو بررسی کردم ولی اغلب مشکلات زیادی دارن و حتی اون‌های هم که open-source هستن نیاز به کار زیادی برای بهبود دارن. بعضی مشکلاتی که من تا به حال دیدم این‌ها هستند:
- اختصاصی برای تقویم شمسی؛ این کنترل‌ها مختص تقویم شمسی ایجاد شدن و قابلیت کار با تقویم غیر از شمسی رو ندارن. بنابراین اگه لازم بشه در نرم افزاری تقویم شمسی در کنار تقویم میلادی مورد استفاده قرار بگیره کاربردی ندارن.
- فرمت ثابت؛ این کنترل‌ها اغلب برای فقط دریافت تاریخ، اون هم در فرمت ثابتی مثل yyyy/MM/dd طراحی شدن بنابراین نه تنها امکان دریافت زمان در کنار (و یا بدون) تاریخ فراهم نیست، بلکه فقط قادر هستن تاریخ رو با فرمت ثابت دریافت کنن. برای مثال اگه شما بخواهید کاربر مؤلفه سال رو به صورت دو رقمی، نه چهار رقمی وارد کنه، این کنترل‌‌ها توانایی مانور در این زمینه رو ندارند.
- عدم پشتیبانی صحیح از کیبرد و موس به صورت کامل و صحیح؛
- واسط کاربری غیر استاندارد؛ همه کنترل‌هایی که من تا به حال دیدم از واسط کاربری غیر استاندارد رنج می‌برن. مشکلاتی از قبیل استفاده از فونت ها و رنگ‌های خاص و غیر قابل تغییر، اندازه‌‌های نامناسب و ثابت و… .

DateTimeSelector

کنترل DateTimeSelector با هدف پشتیبانی کامل از تقویم شمسی و میلادی (و سایر تقویم‌ها، با احتمالا کمی بهبود) نوشته شده و سعی شده که مشکلاتی که در مورد DateTimePicker‌ و همچنین مشکلات نمونه‌های مشابه ایرانی که بهش اشاره کردم رو نداشته باشه. در واقعه، ویژگی‌های این کنترل، نداشتن مشکلاتی هست که بهش اشاره شد:

- پشتیبانی کامل از تقویم شمسی و میلادی (و سایر تقویم‌ها، با احتمالا کمی بهبود)
- پشتیبانی از مقدار null (خالی) برای مقدار
- امکان انتخاب زمان، تاریخ و یا هر دو
- امکان تغییر فونت و جهت (Direction)
- امکان تغییر رنگ‌ها
- طراحی گرافیکی منطبق بر Style ویندوز و برنامه
- پشتیبانی مناسب از کیبرد و موس*
- رسم با سرعت بالا بدون Flicker
- open-source و تحت لیسانس MIT
- و…

* در زمینه پشتیبانی کامل از موس و کیبرد کمی جای کار داره
چند Screenshot از این کنترل:
127866127867127868
پروژه در Github (https://github.com/mchehraz/datetimeselector)
دانلود سورس و یا باینری (DLL) از Github (https://github.com/mchehraz/datetimeselector/releases)
لینک مطلب کامل در وبلاگ من (http://blog.mchehraz.com/?p=57)

* هنوز فرصت به توضیح کامل مشخصات و نحوه استفاده از اون نکردم. سوالاتتون رو میتونید در همین تاپیک یا پست لینک شده در وبلاگ بپرسید.
* ویراست 1.1.2 ارسال شد.

ghasem110deh
دوشنبه 06 بهمن 1393, 00:51 صبح
سلام
توی دیتابیس sql که فیلد تاریخش Date هست ... چطور ذخیرش می کنین ؟

plus
دوشنبه 06 بهمن 1393, 01:09 صبح
مشخصه Value مقدار تاریخ و زمان انتخاب شده رو از نوع ?DateTime (تقویم میلادی) برمیگردونه و این کار رو برای ذخیره در دیتابیس (فیلدی از نوع DateTime) راحت میکنه؛ این مقدار میتونید به روش‌های مختلف به دیتابیس بفرستید.
نحوه ارسال دیگه بستگی به روش ارتباط با دیتابیس داره. برای مثال اگه از ADO.NET استفاده میشه میتونید مقدار به عنوان پارامتر به SqlCommand بدین؛ یا اگه از EF استفاده میشه میتونید مقدار DateTime رو به مشخصه Entity مربوطه انتساب بدین.

DateTime? selectedDate = dateTimeSelector1.Value;
...

البته کسانی که قصد ذخیره تاریخ رو به صورت متنی دارن هم میتونن از مشخصه Text و یا GetText برای دریافت و ذخیره مستقیم تاریخ (بدون تبدیل) استفاده کنن.
string selectedDate = dateTimeSeletor1.Text;
string selectedDateInSpecifiedFormat = dateTimeSelector1.GetText("yyyy/MM/dd");

ولی روش اول پیشنهاد میشه.

Imenam
دوشنبه 06 بهمن 1393, 19:02 عصر
با سلام و تشکر بابت کامپوننت

اگر فایل dll رو همینجا آپلود می کردین بهتر بود... من که نتونستم از لینک ها فایل دانلود کنم:متفکر:

plus
دوشنبه 06 بهمن 1393, 19:57 عصر
با سلام و تشکر بابت کامپوننت

اگر فایل dll رو همینجا آپلود می کردین بهتر بود... من که نتونستم از لینک ها فایل دانلود کنم:متفکر:
سلام. ضمیمه پست اول کردم. البته در لینکی که داده بودم کافی بود بر روی دکمه سبز با عنوان datetimeselector-1.0-beta-bin.zip کلیک کنید.

mehdighofrani
سه شنبه 07 بهمن 1393, 15:25 عصر
سلام
چرا ارور ....there are no component in را میگیرم موقع ادد کردن؟

Imenam
سه شنبه 07 بهمن 1393, 17:06 عصر
تا حالا بهترین ، ساده ترین و بی نقض ترین کامپوننت تقویم فارسی که من دیدم
واقعا ممنون به خاطر زحمت و تلاشتون:تشویق:

ghasem110deh
سه شنبه 07 بهمن 1393, 17:49 عصر
سلام
می تونیم تو پروژه های فروشی (درآمد زا) استفاده کنیم ؟
البته وقتی منتشر کردین یعنی مشکلی نداره دیگه !

ghasem110deh
سه شنبه 07 بهمن 1393, 18:58 عصر
سلام
الان با تاریخ فارسی ذخیره کردم ... حالا واسه نمایش به تاریخ فارسی چیکار کنم ؟

plus
سه شنبه 07 بهمن 1393, 21:18 عصر
سلام
چرا ارور ....there are no component in را میگیرم موقع ادد کردن؟
چه روشی رو استفاده می‌کنید که به این خطا میخورید؟ یک روش جز روش Add کردن، کشیدن فایل DLL از Windows Explorer‌به Toolbox در VisualStudio‌هست. این روش رو هم امتحان کنید.

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

سلام
می تونیم تو پروژه های فروشی (درآمد زا) استفاده کنیم ؟
البته وقتی منتشر کردین یعنی مشکلی نداره دیگه !
بله تحت لیسانس MIT هست که محدودیت خیلی کمی برای استفاده کننده داره. شما میتونید با یا بدون تغییر سورس در پروژه‌های فروشی ازش استفاده کنید، تا زمانی که فایل لاینسنی که مربوط به پروژه (و بالای فایل های source هست) رو حذف نکنید.

سلام
الان با تاریخ فارسی ذخیره کردم ... حالا واسه نمایش به تاریخ فارسی چیکار کنم ؟
کجا با تاریخ فارسی ذخیره کردین و کجا میخواین نمایش بدین؟
در DataGridView که مقادیر رو به صورت میلادی ذخیره کردین. اگه کلا همه چیز میخواین فارسی کار کنید باید از مشخصه Text‌بجای Value‌ استفاده کنید.

ghasem110deh
سه شنبه 07 بهمن 1393, 21:33 عصر
کجا با تاریخ فارسی ذخیره کردین و کجا میخواین نمایش بدین؟
در DataGridView که مقادیر رو به صورت میلادی ذخیره کردین. اگه کلا همه چیز میخواین فارسی کار کنید باید از مشخصه Text‌بجای Value‌ استفاده کنید.

توی sql server در فیلد نوع DateTime ....
میخوام توی دیتاگرید ویو هم تاریخ فارسی نشون بده ! (چطور باس تبدیل کرد)
*** قبلا از nVarchar استفاده میکردم واسه تاریخ ... ولی الان فیلد رو DateTime استفاده کردم واسه اختلاف دو تاریخ - جستجو بین دو تاریخ و ...
---------
انگار استفاده از DateTime واسه تاریخ دست و بال آدم رو واسه عملیات رو تاریخ بازتر میکنه !

plus
سه شنبه 07 بهمن 1393, 22:00 عصر
توی sql server در فیلد نوع DateTime ....
میخوام توی دیتاگرید ویو هم تاریخ فارسی نشون بده ! (چطور باس تبدیل کرد)
*** قبلا از nVarchar استفاده میکردم واسه تاریخ ... ولی الان فیلد رو DateTime استفاده کردم واسه اختلاف دو تاریخ - جستجو بین دو تاریخ و ...
---------
انگار استفاده از DateTime واسه تاریخ دست و بال آدم رو واسه عملیات رو تاریخ بازتر میکنه !
بله استفاده از DateTime در حالت عادی بهتر بنظر میاد تا استفاده از رشته. کاری که میخواین بکنید خارج از بحث کنترل انتخاب تاریخ هست. شما میتونید در رویداد CellFormatting‌مروبط به DataGridView، تاریخ رو درست قبل از نمایش از یک متغیر DateTime به یک رشته تاریخ شمسی تبدیل کنید. (با استفاده از کلاس PersianCalendar.) جستجو کنید اگه به نتیجه نرسیدید تاپیک جدا بزنید تا بیشتر راهنمایی کنم.

Saman_12
چهارشنبه 08 بهمن 1393, 01:36 صبح
سلام.
به نظر شما میشه کاری کرد که این کامپونت به نسخه های بعدی .net اظافه شه؟(اگربشه به Microsoft فروخته شه بهتر اگر نشد خالی اظافش کنن هم خوبه)

plus
چهارشنبه 08 بهمن 1393, 01:48 صبح
سلام.
به نظر شما میشه کاری کرد که این کامپونت به نسخه های بعدی .net اظافه شه؟(اگربشه به Microsoft فروخته شه بهتر اگر نشد خالی اظافش کنن هم خوبه)
ُسلام. نه، مایکروسافت به اون بزرگی مشکلی با انجام یک چنین پروژه‌هایی از نظر فنی نداره. مشکل از جای دیگه هست. کنترل DateTimePicker که مربوط به خود NET. میشه در مواردی از این کنترل کاملتر و با ثبات تره؛ مشکل اصلی با تقویم شمسیه. البته مشکل از دات نت نیست مشکل اصلی از ویندوزه که تا قبل از نسخه 10 از تقویم شمسی پشتیبانی نمیکنه. البته از ویندوز 10 به بعد با پشتیبانی تقویم شمسی در ویندوز، مشکلات محصولات مایکروسافت در مورد تقویم شمسی کاملا حل میشه و نیازی به کنترل اضافی نیست.
این رو هم اضافه کنم که میشه با روش‌هایی مثل Reflection این محدودیت ویندوز که به NET. هم اعمال میشه رو دور زد و کاری کرد که کنترل DateTimePicker تقویم شمسی نشون بده ولی به دلایلی ترجیح دادم یک کنترل مجزا ایجاد کنم.

Sm_pro
شنبه 11 بهمن 1393, 00:17 صبح
کنترل خوب و کاربردی اما یه سوال دارم اگر یک تاریخ انتخاب بشه آیا رویدادی برای این کنترل وجود داره که تاریخ انتخاب شده رو برگردونه چیزی مثل رویداد TextChanged یا ValueChanged البته این دو Event وجود دارند اما احتمالا در زمان پیاده سازی کنترل Override نشده اند من با این دو Event نتیجه ای نگرفتم

plus
شنبه 11 بهمن 1393, 21:12 عصر
کنترل خوب و کاربردی اما یه سوال دارم اگر یک تاریخ انتخاب بشه آیا رویدادی برای این کنترل وجود داره که تاریخ انتخاب شده رو برگردونه چیزی مثل رویداد TextChanged یا ValueChanged البته این دو Event وجود دارند اما احتمالا در زمان پیاده سازی کنترل Override نشده اند من با این دو Event نتیجه ای نگرفتم
متد OnValueChanged در کنترل به صورت private وجود داره، به صورت protected virtual در آوردمش، در source موجود در github اعمال شده و در فایل باینری موقع release نهایی اعمال میشه، اگه میخواین الان اعمال کنید میتونید src رو دانلود کنید و خودتون build کنید.
رویداد ValueChanged هم دوباره بررسی به درستی کار میکنه منتها دقت کنید که موقع تایپ فراخوانی نمیشه بعد از رفتن focus از روی یکی از مولفه های تاریخ و یا کل کنترل اعمال میشه. شما چکار میخواین بکنید که به نتیجه نرسیدید؟

Sm_pro
شنبه 11 بهمن 1393, 22:54 عصر
متد OnValueChanged در کنترل به صورت private وجود داره، به صورت protected virtual در آوردمش، در source موجود در github اعمال شده و در فایل باینری موقع release نهایی اعمال میشه، اگه میخواین الان اعمال کنید میتونید src رو دانلود کنید و خودتون build کنید.
رویداد ValueChanged هم دوباره بررسی به درستی کار میکنه منتها دقت کنید که موقع تایپ فراخوانی نمیشه بعد از رفتن focus از روی یکی از مولفه های تاریخ و یا کل کنترل اعمال میشه. شما چکار میخواین بکنید که به نتیجه نرسیدید؟

بله دوست عزیز بعد از این که سورس رو دیدم متوجه شدم که این قسمت که شما اصلاح کردین ایراد این کنترل بود که شما توسط کلمات کلیدی protected virtual جهت رونویسی رویداد اصلاح کردید مشکل رویداد کاربردی ValueChanged حل شد دوستان نیز با استفاده از این رویداد میتوانند بلافاصله بعد از انتخاب مولفه های تاریخ، دسترسی به تاریخ انتخاب شده را داشته و متد های مورد نیاز جهت اجرا بعد از انتخاب تاریخ فراخوانی کنند

mohammad2407
پنج شنبه 14 اسفند 1393, 20:32 عصر
سلام وقت بخیر چطور میتونم تاریخی که به صورت متن در دیتا بیس ذخیره شده رو بایند کنیم به این تقویم

مثلا کاربر تصمیم داره تاریخ رو عوض کنه میخوام تاریخی که ذخیره شده رو نمایش بده

ممنون

plus
جمعه 15 اسفند 1393, 09:50 صبح
سلام وقت بخیر چطور میتونم تاریخی که به صورت متن در دیتا بیس ذخیره شده رو بایند کنیم به این تقویم

مثلا کاربر تصمیم داره تاریخ رو عوض کنه میخوام تاریخی که ذخیره شده رو نمایش بده

ممنون
سلام. اگه تاریخ مورد نظر شمسی هست، اول مشخصه UserPersianFormat رو True قرار بدین. حالا میتونید فیلد مورد نظر رو به مشخصه Text کنترل Bind کنید.
اگه فرمتی که برای نگه داری تاریخ استفاده میکنید غیر از فرمت پیشفرض (برای شمسی yyyy/MM/dd مثلا 1390/04/01) هست، مشخصه CustomFormat رو برابر با فرمت مورد نظر قرار بدین.

negar.rafie
جمعه 15 اسفند 1393, 10:24 صبح
آقای plus نسخه نهایی کی آماده میشه؟

NasimBamdad
جمعه 15 اسفند 1393, 12:05 عصر
یکم روی Interface و گرافیکش کار بشه خوشگل تر بشه خوبه

plus
جمعه 15 اسفند 1393, 17:41 عصر
آقای plus نسخه نهایی کی آماده میشه؟
نسخه 1.0 نهایی الان ارسال شده.


یکم روی Interface و گرافیکش کار بشه خوشگل تر بشه خوبه

اگه شما اون چیزی که مد نظرتون هست رو به صورت یک تصویر بگذارین ممنون میشم.
در اصول طراحی "خشگل"ی به اون معنا معمولا حرف آخر رو میزنه. طرحی که میبینید استاندارد ویندوز هست (تقویم خود ویندوز رو ببینید.) طرح مورد نظر باید حتی روی Theme ها HighContrast به خوبی نمایش داده بشه.البته اگه منظورتون Visual Styles ویندوز هست بله... میشه Vistual Styles رو بهش اضافه کرد ولی بازم تو الویت آخره.
129190
باور کنید برای کاربر مهم نیست چقدر برنامه قشنگه..برای مهمه که چقدر راحت باهاش کار میکنه، فوکوس هی اینطرف اونطرف نمیپره، برای هر چیزی روی کیبرد Shortcut هست و ...

NasimBamdad
جمعه 15 اسفند 1393, 22:49 عصر
فکر کنم 2 تا مشکل دیدم در این کنترل زیبا (اگه اشتباه می کنم عذر خواهی من رو بپذیرید )

یکی اینکه با کلیک کردن روی روز انتخابی کنترل بسته نمیشد و باید کلیک می کردیم روی صفحه که پنجره مربوط به انتخاب روز بسته بشه
دوم اینکه تاریخش بروز نبود ، مثلا 1 بهمن که جمعه بود ،،، میشد چهارشنبه توی کنترل

plus
جمعه 15 اسفند 1393, 23:34 عصر
فکر کنم 2 تا مشکل دیدم در این کنترل زیبا (اگه اشتباه می کنم عذر خواهی من رو بپذیرید )

یکی اینکه با کلیک کردن روی روز انتخابی کنترل بسته نمیشد و باید کلیک می کردیم روی صفحه که پنجره مربوط به انتخاب روز بسته بشه
دوم اینکه تاریخش بروز نبود ، مثلا 1 بهمن که جمعه بود ،،، میشد چهارشنبه توی کنترل
دوست عزیز اگه منظوتون سال 93 هست تقویم رو چک کنید روز اول بهمن چهارشنبه بود و روز اول اسفند جمعه (کنترل هم توی تصویر پست قبل همین مقادیر رو نشون میده). در مورد focus هم فکر میکنم یک کنترل دیگه رو بررسی کردین من همه جور حالتی رو تست کردم. اگه یک بررسی میکردین و مطمئین میشدین همین کنترل رو تست کردین خیلی خوب بود.
اول حسابی من رو به شک انداختین که بعد از اینهمه تست ایرادی پیدا شده...

sajaaaaad
شنبه 16 اسفند 1393, 14:58 عصر
با سلام.
.
من نمیتونم ازین کامپونتت استفاده کنم چرا.؟ موقعه که به رفرنسام اضافه میکنمش و توی ToolBox میارمش و به فرمم اضافه میکنم از رفرنسش خطا میگیره.؟؟؟ چرا
129230
ی کامپونتت دیگه رو هم داشتم همین مشکل رو گرفت ازم، رفرنسش با اینکه عدد شده ولی شناسایی نمیشه.! وقتی میزنم using اصلا نمیاد. مشکل کجاس.؟

plus
شنبه 16 اسفند 1393, 16:54 عصر
شما یک شئ ازین کنترل روی فرم دارین چطور خطا میگیره؟! اگه امکانش هست پروژه تست رو آپلود کنید.

NasimBamdad
یک شنبه 17 اسفند 1393, 01:06 صبح
129268

https://www.syncfusion.com/content/en-us/products/images/aspnet/ejdatetime%20picker/DateTimePicker.png

NasimBamdad
یک شنبه 17 اسفند 1393, 01:08 صبح
129270129271129269

NasimBamdad
یک شنبه 17 اسفند 1393, 01:15 صبح
چندتا نمونه طراحی . اگه این طوری طراحی کنید خیلی خوشگل تر میشه

sajaaaaad
یک شنبه 17 اسفند 1393, 06:59 صبح
شما یک شئ ازین کنترل روی فرم دارین چطور خطا میگیره؟! اگه امکانش هست پروژه تست رو آپلود کنید.

.
داداش اونو که پاکش کردم ولی الان دوباره هم ایجاد کردم بازم همون مشکل رو داره.! جالبه اول که ادد میکنم یه لحظه هست، یعنی وقتی میزنم Atf میاد اما هم چند لحظه که رد میشه انگار نه انگار که همچنین کامپوننتی وجود داره.! :ناراحت:
http://s4.picofile.com/file/8175607568/Test.rar.html
لینک دانلود رو گذاشتم

plus
دوشنبه 18 اسفند 1393, 00:56 صبح
چندتا نمونه طراحی . اگه این طوری طراحی کنید خیلی خوشگل تر میشه
طرح های خوبی هستن، ولی به جز بحث امکان انتخاب زمان که در Popup دارن، چیز ویژه ای ندارن با کمی کار میشه تقویم جاری رو به این شکل ها در آورد. چیزی که مهمه یکپارچگی همه کنترلهاست. من اگه تقویم رو فقط به یکی این اشکلال طراحی میکردم، عمده کاربران که میخوان با کنترلهای ویندوز استفاده کنن، با چیزی مثل این مواجه میشدن:
129294
یعنی Theme اصلی که Theme ویندوز هست و اغلب کاربران باهاش کار میکنن اعمال شده (هرچند امکان تغییر رنگ ها هم وجود داره) و اعمال Theme سفارشی فعلا به عهده استفاده کننده ها گذاشته شده، ایجادش هم کار ساختی نیست الان تفاوت این دو تقویم در رنگ بندی و Round بودن گوشه های روز انتخاب شده هست. رنگ بندی بدون تغییر Source قابل تغییره و Round کردم هم کار تغییر یک متد هست. بنابراین اگه میخواین این شکلی باشه بسم الله...!

plus
دوشنبه 18 اسفند 1393, 00:58 صبح
.
داداش اونو که پاکش کردم ولی الان دوباره هم ایجاد کردم بازم همون مشکل رو داره.! جالبه اول که ادد میکنم یه لحظه هست، یعنی وقتی میزنم Atf میاد اما هم چند لحظه که رد میشه انگار نه انگار که همچنین کامپوننتی وجود داره.! :ناراحت:
http://s4.picofile.com/file/8175607568/Test.rar.html
لینک دانلود رو گذاشتم
من پروژه شما رو دانلود کردم و با تعیین آدرس فایل dll تونستم استفاده کنم...متوجه نمیشم مشکل شما کجاست...پروژه رو به دات نت دو ببرید ببینید حل نمیشه؟

NasimBamdad
دوشنبه 18 اسفند 1393, 01:28 صبح
بحث من سر Theme هست و زیباییش امکاناتش مورد نیازم نیست . با گرافیک و خوشگل باشه

sajaaaaad
دوشنبه 18 اسفند 1393, 11:09 صبح
من پروژه شما رو دانلود کردم و با تعیین آدرس فایل dll تونستم استفاده کنم...متوجه نمیشم مشکل شما کجاست...پروژه رو به دات نت دو ببرید ببینید حل نمیشه؟
.
با تعیین آدرس فایل dll یعنی چی..؟ من فایل dll رو توی درایو سی کپی کردم و وقتی به رفرنسام اضافه میکنم و Copy local رو True میکنم و وقتی rebuild میکنم اون فایل dll به پوشه bin اضافه نمیشه.! و وقتی هم که کد مینویسم و میخوام از کنترلش استفاده کنم که کلا خطا میده.! اصلا اجازه اجرا شدن نمیده.! :( :(

plus
دوشنبه 18 اسفند 1393, 12:00 عصر
آدرس فایل dll توی پروژه ای که آپلود کردین با کامپیوتر من فرق میکرد...اون چیز مهمی نیست. شما با پروژه ای که NET 2 باشه امتحان کردی؟

NasimBamdad
سه شنبه 19 اسفند 1393, 01:51 صبح
با اون طراحی ها که معرفی کردم شما نمی تونید به اون شکل در بیارید ؟ خوشگل تر بشه ؟

plus
سه شنبه 19 اسفند 1393, 10:39 صبح
با اون طراحی ها که معرفی کردم شما نمی تونید به اون شکل در بیارید ؟ خوشگل تر بشه ؟
نه حداقل در حال حاضر. صرفا نمیشه به یک حالت خاص به قول شما خوشگل طراحیش کرد و استاندارد بودن کنترل رو زیر سوال برد. پیاده سازی یک سیستم Theme کامل و بدون نقص هم زمان بر هست و جزو الویت ها هم نیست ولی همونطور که گفتم میتونید Source-Code رو دریافت کنید و تغییرات مورد نظر رو بدین. هرچند بدون تغییر Source هم امکان تغییر رنگ ها و فونت وجود داره.

shahab.es
چهارشنبه 02 اردیبهشت 1394, 02:26 صبح
سلام به همه دوستان
ممنون بابت کار خوبتون
من یه مشکل دارم
اونم اینه که تاریخ رو میلادی انتخاب میکنه
یعنی کلا تاریخ شمسی نداره
ممنون میشم کمک کنید
یا علی

plus
چهارشنبه 02 اردیبهشت 1394, 10:23 صبح
سلام به همه دوستان
ممنون بابت کار خوبتون
من یه مشکل دارم
اونم اینه که تاریخ رو میلادی انتخاب میکنه
یعنی کلا تاریخ شمسی نداره
ممنون میشم کمک کنید
یا علی
سلام. از پنجره Properties مشخصه UsePersianFormat رو برابر True قرار بدین.

shahab.es
چهارشنبه 02 اردیبهشت 1394, 12:52 عصر
سلام. از پنجره Properties مشخصه UsePersianFormat رو برابر True قرار بدین.
خیلی خیلی از کمکتون ممنون
اگه بازم مشکلی داشتم ازتون راهنمایی میگیرم
یا علی

mohammad2407
پنج شنبه 03 اردیبهشت 1394, 01:34 صبح
چطوری تاریخ رو بهش میشه پاس داد من میخوام تاریخ رو از یه متغیر و یا .... بگیرم

plus
پنج شنبه 03 اردیبهشت 1394, 05:14 صبح
چطوری تاریخ رو بهش میشه پاس داد من میخوام تاریخ رو از یه متغیر و یا .... بگیرم
اگه مقدار شما از نوع DateTime هست، اون رو به مشخصه Value نسبت بدین:

DateTime dateTime = DateTime.Now
dateTimeSelector1.Value = dateTime;

و اگه از نوع رشته هست به مشخصه Text نسبت بدین. البته باید فرمت رشته با فرمت کنترل تطابق داشته باشه و گرنه مقدار برابر با null میشه. اگ مشخصه UsePersianFormat برابر True باشه، فرمت پیشفرض yyyy/MM/dd هست.

string dateTime = "1390/10/14";
dateTimeSelector1.Text = dateTime;

mohammad2407
پنج شنبه 03 اردیبهشت 1394, 13:16 عصر
مشخصه text نداره !!!

plus
پنج شنبه 03 اردیبهشت 1394, 13:36 عصر
مشخصه text نداره !!!
داره ولی در Intellisense نمایش داده نمیشه. شما اگه در Editor بنویسید خطایی نمیده.
علت عدم نمایش هم این هست که این روش توصیه نمیشه. بهتره ابتدا تاریخ مورد نظرتون رو به شی DateTime تبدیل کنید و بعد از مشخصه Value استفاده کنید.

pouria_bayat
جمعه 18 اردیبهشت 1394, 22:03 عصر
اگر خاصیت Style رو روی List بزاریم و UsePersianFormat هم true باشه و خاصیت Fromat رو روی Long بزاریم ماه رو به صورت میلادی و بقیه تاریخ رو درست نشون میده..
131017

pouria_bayat
جمعه 18 اردیبهشت 1394, 22:07 عصر
در ضمن اگر یک خاصیت جدید برای اینکه بتونیم قالب برنامه رو به طرحهایی که دوستان پیشنهاد دادن (مثل پست 27 و 28 همین تایپیک) رو هم تغییر بدیم دیگه حرف نداره، البته قالب پیش فرض و هم همینطور برای کنترل های ویندوز داشته باشه در این صورت خیلی خیلی خوب میشه، البته برای کسانی مثل ما که زیاد توانایی دخل و تصرف توی کد رو نداریم میگم.

plus
شنبه 19 اردیبهشت 1394, 00:17 صبح
اگر خاصیت Style رو روی List بزاریم و UsePersianFormat هم true باشه و خاصیت Fromat رو روی Long بزاریم ماه رو به صورت میلادی و بقیه تاریخ رو درست نشون میده..
131017
ممنون بابت یافتن این مشکل... مشکل رو حل کردم و میتونید ویرایست آپدیت شده رو از پست اول دریافت کنید.


در ضمن اگر یک خاصیت جدید برای اینکه بتونیم قالب برنامه رو به طرحهایی که دوستان پیشنهاد دادن (مثل پست 27 و 28 همین تایپیک) رو هم تغییر بدیم دیگه حرف نداره، البته قالب پیش فرض و هم همینطور برای کنترل های ویندوز داشته باشه در این صورت خیلی خیلی خوب میشه، البته برای کسانی مثل ما که زیاد توانایی دخل و تصرف توی کد رو نداریم میگم.
بله خوب میشه ولی متاسفانه در حال حاضر اصلا شرایط پیاده سازی چنین طرحی رو ندارم.

pouria_bayat
شنبه 26 اردیبهشت 1394, 16:28 عصر
سلام وقت بخیر جسارتا اگر امکانش هست خاصیت Dock مربوط به کامپوننت رو بررسی کنید توی خاصیت Dock سمت راست و سمت چپ سایز ثابت میده و مشگل داره.
ممنونم بخاطر کامپوننت مفیدتون.

plus
شنبه 26 اردیبهشت 1394, 21:04 عصر
سلام وقت بخیر جسارتا اگر امکانش هست خاصیت Dock مربوط به کامپوننت رو بررسی کنید توی خاصیت Dock سمت راست و سمت چپ سایز ثابت میده و مشگل داره.
ممنونم بخاطر کامپوننت مفیدتون.
با سلام و تشکر. مشکل رو حل کردم و ویراست جدید در پست اول ارسال شد.

vbseyyed
سه شنبه 27 مرداد 1394, 01:53 صبح
این رو هم اضافه کنم که میشه با روش‌هایی مثل Reflection این محدودیت ویندوز که به NET. هم اعمال میشه رو دور زد و کاری کرد که کنترل DateTimePicker تقویم شمسی نشون بده ولی به دلایلی ترجیح دادم یک کنترل مجزا ایجاد کنم.

با سلام

اگر بخوام در پروژه خودم سورسش رو وارد کنم به چه صورتي مي تونم با توجه به اين که پروژه من vb.net(.net 2.0) هستش؟ گفته بودين که با روش هايي مثل reflection اين کار رو بکنيد. امکانش هست توضيح بدين چطور؟ و چرا از اين روش استفاده نکرديد؟

با تشکر

plus
دوشنبه 02 شهریور 1394, 16:59 عصر
با سلام

اگر بخوام در پروژه خودم سورسش رو وارد کنم به چه صورتي مي تونم با توجه به اين که پروژه من vb.net(.net 2.0) هستش؟ گفته بودين که با روش هايي مثل reflection اين کار رو بکنيد. امکانش هست توضيح بدين چطور؟ و چرا از اين روش استفاده نکرديد؟

با تشکر

دلیلی نداره این کار رو بکنید ولی به هر حال میتونید سورس رو از github دانلود کنید و پروژه (فایل csproject.) رو به solution خودتون اضافه کنید. اون موضوع Reflection که گفتم بحث دیگه ای بود برای استفاده از کنترل خود DateTimePicker بود نه این کنترل.

shaho.khedri
دوشنبه 02 شهریور 1394, 17:27 عصر
.
داداش اونو که پاکش کردم ولی الان دوباره هم ایجاد کردم بازم همون مشکل رو داره.! جالبه اول که ادد میکنم یه لحظه هست، یعنی وقتی میزنم Atf میاد اما هم چند لحظه که رد میشه انگار نه انگار که همچنین کامپوننتی وجود داره.! :ناراحت:
http://s4.picofile.com/file/8175607568/Test.rar.html
لینک دانلود رو گذاشتم

سلام
منم همچین مشکلی داشتم که Target رو برای Dot Net Framework از .Net Framework 4 Client Profile به .NetFramework 4 تغییر دادم و مشکل حل شد.


Plus عزیز خیلی خیلی ممنون از کار مفیدتون.
منم یه سوال کوچولو بپرسم با اجازه
توی یه پروژه به سرچ ترکیبی نیاز دارم و یکی از آیتم های جستجو تاریخه
برای داینامیک بودن UI برنامه میخوام به محض تغییر تاریخ نتیجه نمایش داده بشه و طبیعتاً با صفر کردن تاریخ همه ی رکوردها نمایش داده بشن
راهی هست که توی کنترل چیزی بذارم که کاربر با زدنش تاریخ رو خالی کنه؟

plus
دوشنبه 02 شهریور 1394, 17:35 عصر
سلام
منم همچین مشکلی داشتم که Target رو برای Dot Net Framework از .Net Framework 4 Client Profile به .NetFramework 4 تغییر دادم و مشکل حل شد.


Plus عزیز خیلی خیلی ممنون از کار مفیدتون.
منم یه سوال کوچولو بپرسم با اجازه
توی یه پروژه به سرچ ترکیبی نیاز دارم و یکی از آیتم های جستجو تاریخه
برای داینامیک بودن UI برنامه میخوام به محض تغییر تاریخ نتیجه نمایش داده بشه و طبیعتاً با صفر کردن تاریخ همه ی رکوردها نمایش داده بشن
راهی هست که توی کنترل چیزی بذارم که کاربر با زدنش تاریخ رو خالی کنه؟

خواهش میکنم. اگه منظورتن از چیزی، یک دکمه یا مثل اون هست، میتونید یک UserControl درست کنید و کنترل رو به همران یک دکمه در اون قرار بدین و بجای استفاده مستقیم از کنترل، از UserControl خودتون استفاده کنید.

aliramazani
سه شنبه 10 شهریور 1394, 21:50 عصر
عالی بود
ای کاش ادامه بدین

imanir
چهارشنبه 11 شهریور 1394, 09:32 صبح
سلام،وقت همگی بخیر

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

plus
پنج شنبه 12 شهریور 1394, 08:17 صبح
عالی بود
ای کاش ادامه بدین
ممنون. کمبود جزیی داره که هرکس بخواد با کمی وقت میتونه حلش کنه. اگه یه روزی فرصت کردم تکمیلش میکنم.

سلام،وقت همگی بخیر

تقویم رو روی persian قرار دادم ولی موقع خروجی گرفتن تاریخ میلادی رو بر میگردونه.مشکل کجاست ؟ باید مجدد برگردونده بشه به شمسی یا خیر ؟
مشکلی نیست، شمسی بودنش مربوط به UI هست. کنترل خروجی DateTime میده که تاریخ میلادی هست که میتونید به شمسی تبدیلش کنید و یا از مشخصه Text و یا متد GetText استفاده کنید ولی روش اول رو توصیه میکنم.

shaghaghi
دوشنبه 06 مهر 1394, 22:30 عصر
سلام.
آیا در این کامپوننت برای متمایز نمودن رنگ روزهای تعطیل سال بر اساس تقویم تعریفی خودمون راهی وجود داره؟
ممنون.

plus
دوشنبه 06 مهر 1394, 23:09 عصر
سلام.
آیا در این کامپوننت برای متمایز نمودن رنگ روزهای تعطیل سال بر اساس تقویم تعریفی خودمون راهی وجود داره؟
ممنون.
با سلام. به صورت built-in چنین امکانی پیاده سازی نشده ولی اگه شما مایل باشید که source code رو دانلود کنید و این امکان رو برای خودتون اضافه کنید من میتونم راهنمایی کنم که در چه کلاس و متدی رنگ روزهای تقویم تعیین میشه و چطور میتونید این امکان رو اضافه کنید.

saeidghadiri
سه شنبه 07 مهر 1394, 10:42 صبح
سلام ممنون بابت کاری که انجام داده اید.
لطفا راهنمایی کتید.

می خوام تو بعضی فرم ها زمان و تاریخ و باهم نشون بده و ثبت کنه چطوری تنظیم کنم تو Properties و اینکه من با لینک دارم مقدار رو به sql ارسال می کنم اما نمی دونم چطور باید تاریخ و زمان بنویسم


135554135555

try
{
using (BehranDBDataContext behDB = new BehranDBDataContext())
{
Tbl_Test Add = new Tbl_Test();

Add.Name = txt_Name.Text;
Add.ShebaAccount = txt_ShebaAccount.Text;
//Add.DateTime = dateTimeSelector1.DateTimeFormat.SetAllDateTimePat terns();


behDB.Tbl_Tests.InsertOnSubmit(Add);
behDB.SubmitChanges();

MessageBox.Show("اطلاعات با موفقیت ثبت شده است");

//خالی کردن اجزا بعد از ثبت
txt_Name.Text = "";
//dateTimeSelector1 = "";

//نمایش در DGV
RefreshDataInsert();
}

}
catch (SqlException ex)
{
MessageBox.Show("خطای اتصال به بانک اطلاعاتی" + ex);
}

plus
سه شنبه 07 مهر 1394, 11:10 صبح
سلام ممنون بابت کاری که انجام داده اید.
لطفا راهنمایی کتید.

می خوام تو بعضی فرم ها زمان و تاریخ و باهم نشون بده و ثبت کنه چطوری تنظیم کنم تو Properties و اینکه من با لینک دارم مقدار رو به sql ارسال می کنم اما نمی دونم چطور باید تاریخ و زمان بنویسم


سلام. همونطور که در پست های قبلی اشاره شده، باید از مشخصه Value استفاده کنید.

Add.DateTime = dateTimeSelector1.Value;


اینطوری هم تاریخ و هم زمان در فیلد مورد نظر ذخیره میشه.

saeidghadiri
سه شنبه 07 مهر 1394, 14:23 عصر
سلام. همونطور که در پست های قبلی اشاره شده، باید از مشخصه Value استفاده کنید.

Add.DateTime = dateTimeSelector1.Value;


اینطوری هم تاریخ و هم زمان در فیلد مورد نظر ذخیره میشه.

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

plus
چهارشنبه 08 مهر 1394, 04:53 صبح
برای نمایش زمان و تاریخ در کنار هم چی
مشخصه ی Format رو روی Custom بگذارین و مشخصه CustomFormat رو به صورت دلخواه تعیین کنید. مثلا:

dateTimeSelector1.Format = DateTimeSelectorFormat.Custom;
dateTimeSelector1.CustomFormat = "yyyy/MM/dd hh:mm";

که در اینجا yyyy سال رو به صورت چهار رقمی نمایش میده و در کناریش MM ماه رو به صورت عددی و الی آخر. در واقع با مشخصه CustomFormat شما به صورت دلخواه میتونید ترتیب قرار گرفتن و نحوه نمایش مولفه های تاریخ رو به صورت دلخواه مشخص کنید. در مثال بالا کنترل yyyy رو با سال چهار رقمی جایگزین میکنه و MM رو با ماه دو رقمی و ...
لیست Format specifier هایی که کنترل پشتیبانی میکنه به صورت زیر هست:

s ثانیه از 0 تا 59
ss ثانیه از 01 تا 59
m دقیقه از 0 تا 59
mm دقیقه از 00 تا 59
h ساعت از 1 تا 12
hh ساعت از 01 تا 12
H ساعت از 0 تا 24
HH ساعت از 00 تا 24
t نمایش دهنده ق.ظ/ب.ظ به صورت یک کاراکتری
tt نمایش دهنده ق.ظ/ب.ظ
d روز از 1 تا 31
dd روز از 01 تا 31
ddd روز هفته به صورت خلاصه شده
dddd روز هفته
M ماه از 1 تا 12
MM ماه از 01 تا 12
MMM نام ماه به صورت خلاصه
MMMM نام ماه
y سال از 0 تا 99
yy سال از 00 تا 99
yyy سال با حداقل سه رقم
yyyy سال به صورت چهار رقمی
/ جدا کننده تاریخ بر اساس تنظیمات سیستم (مقدار جایگزین معمولا خود / و یا - هست)

و البته کاربر میتونه مولفه هایی که نمایش داده میشه رو تغییر بده و صرفا برای نمایش تاریخ نیستن.

توضیحات بیشتر در مورد Format specifier ها اینجا هست: https://msdn.microsoft.com/en-us/library/8kb3ddd4%28v=vs.110%29.aspx
اگه ابهامی بود در خدمتم.

shaghaghi
چهارشنبه 08 مهر 1394, 18:56 عصر
با سلام. به صورت built-in چنین امکانی پیاده سازی نشده ولی اگه شما مایل باشید که source code رو دانلود کنید و این امکان رو برای خودتون اضافه کنید من میتونم راهنمایی کنم که در چه کلاس و متدی رنگ روزهای تقویم تعیین میشه و چطور میتونید این امکان رو اضافه کنید.
ممنون می شوم اگر لطف کنید راهنمایی بفرمایید.

plus
پنج شنبه 09 مهر 1394, 07:26 صبح
ممنون می شوم اگر لطف کنید راهنمایی بفرمایید.

عملیات رسم هر روز در تقویم در متد DrawDay در کلاس CalendarControl در فایل CalendarControl.cs انجام میشه:

private void DrawDay(Graphics graphics, DateTime dayDate, DayPosition dayPosition) {
bool isCurrentDay = dayDate.Date.Equals(value.Date);
bool isCurrentMonthDay = this.IsCurrentMonthsDate(dayDate);
bool isToday = dayDate.Date.Equals(DateTime.Now.Date);
string dayText = this.Calendar.GetDayOfMonth(dayDate).ToString();
bool isFocused = focusedDayPosition.Equals(dayPosition);
Rectangle bounds = this.GetDayBounds(dayPosition);
Rectangle textBounds = new Rectangle(bounds.Left + dayTextPadding.Left,
bounds.Top + dayTextPadding.Top,
bounds.Width - dayTextPadding.Horizontal,
bounds.Height - dayTextPadding.Vertical);

TextFormatFlags format = TextFormatFlags.Right | TextFormatFlags.VerticalCenter;
if (this.RightToLeft == RightToLeft.Yes) {
format |= TextFormatFlags.RightToLeft;
}
Color foreColor;
Color backColor;
if (isCurrentDay) {
foreColor = this.titleForeColor;
backColor = this.titleBackColor;
}
else if (!isCurrentMonthDay) {
foreColor = this.trailingForeColor;
backColor = this.BackColor;
}
else {
foreColor = this.ForeColor;
backColor = this.BackColor;
}
using (var brush = new SolidBrush(backColor)) {
Rectangle rect = bounds;
rect.Inflate(-1, -1);
graphics.FillRectangle(brush, rect);
}
...

همونطور که میبینید بر اساس اینکه روز چه وضعیتی داشته باشه (انتخاب شده باشه یا نه، Focus داشته باشه یا نه و ...) شروطی بررسی شده و در نهایت با متد FillRectangle پس زمینه رسم شده. شما باید به طریقی در این متد، بررسی کنید که روز مورد نظر (dayDate) روز تعطیل هست یا نه. اگه هست رنگ مورد نظر خودتون رو به backColor نسبت بدین.
برای این کار یک راه این هست که یک Property به کنترل و همینطور به کلاس CalendarControl اضافه کنید که شامل آرایه ای از روزهای تعطیل میشه. با داشته این آرایه در این کلاس میتونید بررسی رو انجام بدین. برای اضافه کردن یک Property میتونید الگویی که برای سایر Property ها در نظر گرفته شده رو دنبال کنید. (برای مثال، ForeColor رو در کلاسهای DateTimeSelector و CalendarControl بررسی کنید.
راه دیگه میتونه تعریف یک EventHandler باشه که در اون استفاده کننده تعیین کنه که آیا روز مربوطه تعطیل هست یا نه...

saeidghadiri
جمعه 10 مهر 1394, 09:54 صبح
مشخصه ی Format رو روی Custom بگذارین و مشخصه CustomFormat رو به صورت دلخواه تعیین کنید. مثلا:

dateTimeSelector1.Format = DateTimeSelectorFormat.Custom;
dateTimeSelector1.CustomFormat = "yyyy/MM/dd hh:mm";

که در اینجا yyyy سال رو به صورت چهار رقمی نمایش میده و در کناریش MM ماه رو به صورت عددی و الی آخر. در واقع با مشخصه CustomFormat شما به صورت دلخواه میتونید ترتیب قرار گرفتن و نحوه نمایش مولفه های تاریخ رو به صورت دلخواه مشخص کنید. در مثال بالا کنترل yyyy رو با سال چهار رقمی جایگزین میکنه و MM رو با ماه دو رقمی و ...
لیست Format specifier هایی که کنترل پشتیبانی میکنه به صورت زیر هست:

s ثانیه از 0 تا 59
ss ثانیه از 01 تا 59
m دقیقه از 0 تا 59
mm دقیقه از 00 تا 59
h ساعت از 1 تا 12
hh ساعت از 01 تا 12
H ساعت از 0 تا 24
HH ساعت از 00 تا 24
t نمایش دهنده ق.ظ/ب.ظ به صورت یک کاراکتری
tt نمایش دهنده ق.ظ/ب.ظ
d روز از 1 تا 31
dd روز از 01 تا 31
ddd روز هفته به صورت خلاصه شده
dddd روز هفته
M ماه از 1 تا 12
MM ماه از 01 تا 12
MMM نام ماه به صورت خلاصه
MMMM نام ماه
y سال از 0 تا 99
yy سال از 00 تا 99
yyy سال با حداقل سه رقم
yyyy سال به صورت چهار رقمی
/ جدا کننده تاریخ بر اساس تنظیمات سیستم (مقدار جایگزین معمولا خود / و یا - هست)

و البته کاربر میتونه مولفه هایی که نمایش داده میشه رو تغییر بده و صرفا برای نمایش تاریخ نیستن.

توضیحات بیشتر در مورد Format specifier ها اینجا هست: https://msdn.microsoft.com/en-us/library/8kb3ddd4%28v=vs.110%29.aspx
اگه ابهامی بود در خدمتم.

سلام ممنون از راهنماییت.
حالا فهمیدم اما از اگه با این روش ساعت همراه با تاریخ در یک فیلد ذخیره کنیم زمان جستجو به مشکل بر میخوریم حالا ازت راهنمایی می خوام می خوام زمان جدا و تاریخ جدا باشه چکار کنم 2 باز dateTimeSelector رو در فرم اضافه کنم؟ و یکی برای زمان و یکی برای تاریخ باشه؟

و اینکه زمان رو به صورت Linq جطور ذخیره کنم ؟
یه مورد دیکه در پست 11 به Ghasem گفتی برای تاریخ به صورت شمسی در sql ذخیره شه از به کلاس استفاده کنه من راجب اون کلاس جستجو کردم ولی کارهایی که بقیه گفته بودن جواب نداد و ذخیره باز به صورت میلادی در SQL انجام میشه.

plus
جمعه 10 مهر 1394, 16:29 عصر
سلام ممنون از راهنماییت.
حالا فهمیدم اما از اگه با این روش ساعت همراه با تاریخ در یک فیلد ذخیره کنیم زمان جستجو به مشکل بر میخوریم حالا ازت راهنمایی می خوام می خوام زمان جدا و تاریخ جدا باشه چکار کنم 2 باز dateTimeSelector رو در فرم اضافه کنم؟ و یکی برای زمان و یکی برای تاریخ باشه؟

و اینکه زمان رو به صورت Linq جطور ذخیره کنم ؟
یه مورد دیکه در پست 11 به Ghasem گفتی برای تاریخ به صورت شمسی در sql ذخیره شه از به کلاس استفاده کنه من راجب اون کلاس جستجو کردم ولی کارهایی که بقیه گفته بودن جواب نداد و ذخیره باز به صورت میلادی در SQL انجام میشه.
سلام. شما میتونی اگه بخوای از دو کنترل استفاده کنی ولی این کار هیچ مزیتی ایجاد نمیکنه. در حالتی که فقط از یک کنترل استفاده کنی هم میتونی تاریخ و زمان رو به صورت جدا داشته باشی و اگه بخوای به صورت جدا ذخیره کنی. خروجی کنترل یک متغیر از نوع DateTime هست که مشخصه Date اون تاریخ و مشخصه TimeOfDay اون زمان رو نگه میداره. در مورد اینکه در جستجو به مشکل میخوره هم، نمیدونم چرا اینطور فکر میکنی، هرچند این موضوع از خارج از بحث این تاپیک هست.

در مورد ذخیره زمان در Linq هم موضوع خارج از بحث تاپیک هست من هم با Linq زیاد کار نکردم، برای ذخیره تاریخ به صورت شمسی هم شما باید خروجی این کنترل رو با کلاس PersianCalendar به صورت رشته تبدیل کنی (تعداد زیادی تاپیک در این مورد هست) و بعد اون رشته رو در یک فیلد "رشته" ای مثل (char(n در SQL ذخیره کنی، نه در یک فیلد ِDateTime یا نوع های شبیه این. البته معمولا توصیه میشه که شما تاریخ رو به صورت میلادی در SQL Server دخیره کنی.

saeidghadiri
شنبه 11 مهر 1394, 07:05 صبح
سلام. شما میتونی اگه بخوای از دو کنترل استفاده کنی ولی این کار هیچ مزیتی ایجاد نمیکنه. در حالتی که فقط از یک کنترل استفاده کنی هم میتونی تاریخ و زمان رو به صورت جدا داشته باشی و اگه بخوای به صورت جدا ذخیره کنی. خروجی کنترل یک متغیر از نوع DateTime هست که مشخصه Date اون تاریخ و مشخصه TimeOfDay اون زمان رو نگه میداره. در مورد اینکه در جستجو به مشکل میخوره هم، نمیدونم چرا اینطور فکر میکنی، هرچند این موضوع از خارج از بحث این تاپیک هست.

در مورد ذخیره زمان در Linq هم موضوع خارج از بحث تاپیک هست من هم با Linq زیاد کار نکردم، برای ذخیره تاریخ به صورت شمسی هم شما باید خروجی این کنترل رو با کلاس PersianCalendar به صورت رشته تبدیل کنی (تعداد زیادی تاپیک در این مورد هست) و بعد اون رشته رو در یک فیلد "رشته" ای مثل (char(n در SQL ذخیره کنی، نه در یک فیلد ِDateTime یا نوع های شبیه این. البته معمولا توصیه میشه که شما تاریخ رو به صورت میلادی در SQL Server دخیره کنی.

سلام
پس میشه به میلادی ذخیره کرد و توی دیتا گرید شمسی نشون داد اون هم با کلاس persiancalender انجام میشه درسته؟

plus
شنبه 11 مهر 1394, 07:15 صبح
سلام
پس میشه به میلادی ذخیره کرد و توی دیتا گرید شمسی نشون داد اون هم با کلاس persiancalender انجام میشه درسته؟
بله میتونید به میلادی ذخیره کنید و در دیتاگرید و یا هرجای دیگه به شمسی تبدیل کنید و نمایش بدین. البته برای نمایش در این کنترل نیاز به تبدیل نیست ولی برای دیتاگرید باید تبدیل کنید. اینجا (http://barnamenevis.org/showthread.php?484115-%D9%86%D9%85%D8%A7%DB%8C%D8%B4-%D8%B4%D9%85%D8%B3%DB%8C-%D8%AA%D8%A7%D8%B1%DB%8C%D8%AE-%DA%A9%D9%87-%D8%A8%D8%B5%D9%88%D8%B1%D8%AA-%D9%85%DB%8C%D9%84%D8%A7%D8%AF%DB%8C-%D8%B0%D8%AE%DB%8C%D8%B1%D9%87-%D8%B4%D8%AF%D9%87&p=2166714&viewfull=1#post2166714) توضیحاتی در این مورد دادم.

shaghaghi
یک شنبه 12 مهر 1394, 13:00 عصر
عملیات رسم هر روز در تقویم در متد DrawDay در کلاس CalendarControl در فایل CalendarControl.cs انجام میشه:
...راه دیگه میتونه تعریف یک EventHandler باشه که در اون استفاده کننده تعیین کنه که آیا روز مربوطه تعطیل هست یا نه...
ضمن تشکر، لطفا برای dateTimeSelector هم راهنمایی بفرمایید چون چنین متدی در آن ندیدم.
ضمنا کامپوننت calendarControl فاقد مشخصه UsePersianFormat است می خواستم ببینم چه جوری تقویم فارسی رو میشه تنظیم کرد؟
ممنون

plus
یک شنبه 12 مهر 1394, 18:20 عصر
ضمن تشکر، لطفا برای dateTimeSelector هم راهنمایی بفرمایید چون چنین متدی در آن ندیدم.
ضمنا کامپوننت calendarControl فاقد مشخصه UsePersianFormat است می خواستم ببینم چه جوری تقویم فارسی رو میشه تنظیم کرد؟
ممنون
چه متدی باشد باشه؟ تاپیک رو مطالعه کنید فکر میکنم توضیحات کافی باشه. اگه calendarControl رو بخواین به صورت مجزا از DateTimeSelector با تقویم شمسی استفاده کنید میتونید به این صورت این کنترل رو شمسی کنید:

calendarControl.DateTimeFormat = Atf.UI.PersianDateTimeFormat.GetPersianDateTimeFor mat();

vB.N3T
یک شنبه 12 مهر 1394, 23:21 عصر
این خطا برا چیه135728

plus
دوشنبه 13 مهر 1394, 09:21 صبح
این خطا برا چیه

ظاهرا Visual Studio امکان دسترسی به فایل مربوط به کامپوننت رو نداره. سعی کنید از فایل رو یک جای دیگه قرار بدین و دوباره به Toolbox اضافش کنید. پروژه رو هم Clean کنید یا سعی کنید روی یک پروژه جدید امتحان کنید.

shaghaghi
دوشنبه 13 مهر 1394, 10:04 صبح
چه متدی باشد باشه؟ تاپیک رو مطالعه کنید فکر میکنم توضیحات کافی باشه. ..[/CSHARP]

dateTimeSelector فاقد رخدادی با نام DrawDay و یا نام های مشابه می باشد.

vB.N3T
دوشنبه 13 مهر 1394, 15:36 عصر
چطوری باید رفرنسشو اضافه کنیم

Error 1 The type or namespace name 'Atf' could not be found (are you missing a using directive or an assembly reference?) c:\users\ali\documents\visual studio 2010\Projects\WindowsFormsApplication10\WindowsFor msApplication10\Form1.Designer.cs 56 17 WindowsFormsApplication10

plus
دوشنبه 13 مهر 1394, 21:00 عصر
dateTimeSelector فاقد رخدادی با نام DrawDay و یا نام های مشابه می باشد.
شما اگه بخوای از DLL کامپایل شده استفاده کنی بله، همونطور که گفتم:


به صورت built-in چنین امکانی پیاده سازی نشده ولی اگه شما مایل باشید که source code رو دانلود کنید و این امکان رو برای خودتون اضافه کنید من میتونم راهنمایی کنم که در چه کلاس و متدی رنگ روزهای تقویم تعیین میشه و چطور میتونید این امکان رو اضافه کنید.

و میتونید این متد (و نه Event) رو در سورس کد و البته در کلاس CalendarControl نه DateTimeSelector پیدا کنید، ویرایش کنید و dll سفارشی رو بسازید.

plus
دوشنبه 13 مهر 1394, 21:01 عصر
چطوری باید رفرنسشو اضافه کنیم

Error 1 The type or namespace name 'Atf' could not be found (are you missing a using directive or an assembly reference?) c:\users\ali\documents\visual studio 2010\Projects\WindowsFormsApplication10\WindowsFor msApplication10\Form1.Designer.cs 56 17 WindowsFormsApplication10

از بخش References مربوط به Project میتونید فایل DLL رو اضافه کنید و یا اینکه روی ToolBox راست کلیک کنید و Choose Items... رو بزنید و DLL رو اضافه کنید.

mohammadmowlavi
چهارشنبه 29 مهر 1394, 11:25 صبح
سلام ضمن تشکر از زحمت شما فرض کنید کاربر بخواد تاریخ تولد رو وارد کنه چون تقویم شما قابلیت انتخاب سال رو نداره و همچنین ماه رو خیلی اذیت میشه و ترجیح میده دستی وارد کنه!

plus
یک شنبه 03 آبان 1394, 00:03 صبح
سلام ضمن تشکر از زحمت شما فرض کنید کاربر بخواد تاریخ تولد رو وارد کنه چون تقویم شما قابلیت انتخاب سال رو نداره و همچنین ماه رو خیلی اذیت میشه و ترجیح میده دستی وارد کنه!

بله این مشکل رو در صفحه اول پست هم بهش اشاره کردم، البته کاربر میتونه با استفاده از Scroll موس و بدون استفاده از کیبرد تاریخ رو وارد کنه که البته ایده آل نیست. هنوز فرصت نکردم این قابلیت رو به تقویم اضافه کنم.

mohammadmowlavi
پنج شنبه 07 آبان 1394, 22:40 عصر
ممنون از وقتی که میزارین

r4hgozar
شنبه 23 آبان 1394, 18:00 عصر
سلام.
ایا میشه در wpf از این حالت گرافیکیش استفاده کرده بشه؟؟
من به یک selector گرافیکی به این صورت نیاز دارم که بشه تاریخ رو select کرد

plus
شنبه 23 آبان 1394, 18:39 عصر
سلام.
ایا میشه در wpf از این حالت گرافیکیش استفاده کرده بشه؟؟
من به یک selector گرافیکی به این صورت نیاز دارم که بشه تاریخ رو select کرد
سلام.
منظورتون چه حالت گرافیکیی هست؟
کنترل های WinForms رو در Wpf میشه استفاده کرد منتها امتحان نکردم بخصوص اینکه این Popup داره. میتونید امتحان کنید.
https://msdn.microsoft.com/library/ms751761(v=vs.100).aspx

r4hgozar
یک شنبه 24 آبان 1394, 16:05 عصر
سلام.وقتی ادد می کنم dll رو هیچی چیزی برای من در toolbox نمیاره و این مشکل منه.

plus
دوشنبه 25 آبان 1394, 17:02 عصر
سلام.وقتی ادد می کنم dll رو هیچی چیزی برای من در toolbox نمیاره و این مشکل منه.
برای Windows Forms میتونید به پست 76 مراجعه کنید ولی برای Wpf به صورت مستقیم نمیتونید اضافه کنید چون این یک کنترل Windows Forms هست. لینکی که دارم رو مطالعه کنید.

r4hgozar
دوشنبه 25 آبان 1394, 19:01 عصر
بله . ممنون.
مجبور شدم از combobox استفاده کنم./
از توجهتون ممنون

vB.N3T
یک شنبه 13 دی 1394, 23:22 عصر
مهندس سوالی داشتم

اگر تاریخ رو به صورت شمسی در دیتا بیس ذخیره کرده باشیم
و برای ویرایش اطلاعات یه سلکت انجام بدیم و اطلاعات داخل دیتاگرید نمایش داده بشه
با کلیک بر روی سطر های دیتا گرید اطلاعات به تکس باکس منتقل مبشه
میخاستم ببینم چطور تاریخ ثبت شده هم به این کامپوننت ست بشه با کلیک بر روی سطر دیتاگرید

به عنوان مثال این عکس
138172

plus
دوشنبه 14 دی 1394, 20:22 عصر
مهندس سوالی داشتم

اگر تاریخ رو به صورت شمسی در دیتا بیس ذخیره کرده باشیم
و برای ویرایش اطلاعات یه سلکت انجام بدیم و اطلاعات داخل دیتاگرید نمایش داده بشه
با کلیک بر روی سطر های دیتا گرید اطلاعات به تکس باکس منتقل مبشه
میخاستم ببینم چطور تاریخ ثبت شده هم به این کامپوننت ست بشه با کلیک بر روی سطر دیتاگرید

به عنوان مثال این عکس
138172

میتونید در رویداد مربوطه تاریخ رو از سطر و یا DataTable به صورت رشته دریافت کنید و به مشخصه Text کنترل انتقال بدین. البته شاید بهتر باشه که تاریخ رو بعد از دریافت به تاریخ میلادی تبدیل کنید و بعد به مشخصه Value انتقال بدین. به هر حال هر دو روش جواب میده.

vB.N3T
سه شنبه 15 دی 1394, 23:39 عصر
مهندس من فیلد مربوط به تاریخ رو از نوع nvarchar انتخاب کردم و تاریخ به صورت شمسی ذخیره کردم به این صورت

nw.date = dateTimeSelector2.GetText("yyyy/MM/dd");

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

dateTimeSelector1.Value = dataGridView3.CurrentRow.Cells["date"].Value;

plus
چهارشنبه 16 دی 1394, 05:20 صبح
مهندس من فیلد مربوط به تاریخ رو از نوع nvarchar انتخاب کردم و تاریخ به صورت شمسی ذخیره کردم به این صورت

nw.date = dateTimeSelector2.GetText("yyyy/MM/dd");

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

dateTimeSelector1.Value = dataGridView3.CurrentRow.Cells["date"].Value;

هموطور که گفتم از مشخصه Text استفاده کنید:


dateTimeSelector1.Text = dataGridView3.CurrentRow.Cells["date"].Value;

m. hamide7
پنج شنبه 01 بهمن 1394, 10:18 صبح
ممنون از کنترلتون استفاده کردم و خیلی خوب بود
فقط چطور میتونم وقتی که برنامه اجرا میشه روش تاریخ پیش فرض روز به شمسی باشه ؟

plus
پنج شنبه 01 بهمن 1394, 21:48 عصر
ممنون از کنترلتون استفاده کردم و خیلی خوب بود
فقط چطور میتونم وقتی که برنامه اجرا میشه روش تاریخ پیش فرض روز به شمسی باشه ؟

خواهش میکنیم. برای فارسی بودن تاریخ مشخصه UserPersianFormat رو برابر True قرار بدین. برای نمایش تاریخ روز، میتونید در Form_Load تاریخ روز رو به مشخصه Value انتساب بدین:



dateTimeSelector1.Value = DateTime.Now;

vB.N3T
یک شنبه 11 بهمن 1394, 12:12 عصر
مهندس ایا امکان اینو داره تاریخ رو به این صورت نماش بده
یکشنبه 11 بهمن 1394
؟؟؟

plus
دوشنبه 12 بهمن 1394, 23:40 عصر
مهندس ایا امکان اینو داره تاریخ رو به این صورت نماش بده
یکشنبه 11 بهمن 1394
؟؟؟

بله، مشخصه ها رو این صورت مقدار دهی کنید:


dateTimeSelector1.Format = Atf.UI.DateTimeSelectorFormat.Custom;
dateTimeSelector1.CustomFormat = "dddd، dd MMMM yyyy";
dateTimeSelector1.RightToLeft = RightToLeft.Yes;
dateTimeSelector1.UsePersianFormat = true;


البته از طریق Designer هم میتونید این تغییرات رو ایجاد کنید.

138776

vB.N3T
سه شنبه 13 بهمن 1394, 16:22 عصر
مهندس خیلی ممنون

یه سوال دیگه از خدمتتون دارم

زمانی که اطلاعات رو به این صورت در دیتا بیس ذخیره میکنیم
و بعد از اون اطلاعات تاریخ رو در کمبو باکس لود کنیم
و بخواهیم با نغیر اینکس کمبو باکس تاریخ به کامپوننت ست بشه باید از چه خصوصیتی استفاده کرده

قبل از این که به این صورتی تاریخ به شکل .شنبه 11 ابان 1394
در دیتابیس ذخیره کنم

از این کد برای ست کردن تاریخ استفاده میکردم و جواب میداد
dateTimeSelector1.Text = combo_Date.Text;
الان ست نمیشه
ممنون

plus
چهارشنبه 14 بهمن 1394, 20:31 عصر
مهندس خیلی ممنون

یه سوال دیگه از خدمتتون دارم

زمانی که اطلاعات رو به این صورت در دیتا بیس ذخیره میکنیم
و بعد از اون اطلاعات تاریخ رو در کمبو باکس لود کنیم
و بخواهیم با نغیر اینکس کمبو باکس تاریخ به کامپوننت ست بشه باید از چه خصوصیتی استفاده کرده

قبل از این که به این صورتی تاریخ به شکل .شنبه 11 ابان 1394
در دیتابیس ذخیره کنم

از این کد برای ست کردن تاریخ استفاده میکردم و جواب میداد
dateTimeSelector1.Text = combo_Date.Text;
الان ست نمیشه
ممنون

بهتره شما تاریخ رو به صورت متغیر DateTime و فیلد نوع DATE در در دیتابیس ذخیره کنید و موقعی که بازیابی میکنید اون مقدار DateTime (و نه رشته) رو به مشخصه Value انتساب بدین:


dateTimeSelector1.Value = combo_Date.SelectedValue;

vB.N3T
شنبه 24 بهمن 1394, 11:01 صبح
نوع فیلد دیتا بیس رو به date تغیر دادم
و این خطا رو دارم .مشکلش چیه

plus
یک شنبه 25 بهمن 1394, 10:50 صبح
مشخصه SelectedValue از نوع object هست قبل از مقایسه با تاریخ به نوع DateTime تبدیل کنید.

DateTime? selectedValue = (DateTime?)combo_Date.SelectedValue;


البته قبل از اون مطمئن بشید که مشخصه ValueMember مربوط به ComboBox رو درست مقدار دهی کردین. برای اطلاعات بیشتر در این مورد جستجو کنید.

mahaya67
دوشنبه 26 بهمن 1394, 08:11 صبح
من یه کم توضیح میخوام:ناراحت:
من مبتدی هستم.. همه این پست هارو خوندم ولی نمیدونم دقیقا باید چکار کنم من فایل dll رو به پروژه اضافه کردم حالا این date time selector را از کجا باید بیارم! تو کنترل ها نبود. حالا بعدش باید چکار کنم؟؟؟ من فقط میخوام کاربر تاریخ تولدشو وارد کنه و توی دیتا بیس هم فیلد date تعریفش کردم. یه روش آسون برای این کار بهم میگین؟؟؟ :ناراحت:

ژیار رحیمی
سه شنبه 27 بهمن 1394, 14:54 عصر
نوع فیلد دیتا بیس رو به date تغیر دادم
و این خطا رو دارم .مشکلش چیه

سلام s.date یه ابجکت هست که ترکیبی ار تاریخ و زمان هست شما بصورت s.date.Date مقایسه رو انجام بدین

sh
جمعه 07 خرداد 1395, 19:24 عصر
دوست عزیز (Plus) سلام.

وقتی از این DateTimePicker در ویندوز 10 با تاریخ تنظیم شده به فرمت شمسی استفاده میشه کد زیر برای ذخیره در دیتا بیس مقدار فارسی را برمیگرداند
MessageBox.Show(dateTimeSelector1.Value.ToString() );
البته DateTimePicker استاندارد موجود در ویژوال استدیو نیز همین رفتار را نشان می دهد که با قطعه کد ذیل در روال Form_Load قابل حل می باشد.

System.Threading.
Thread.CurrentThread.CurrentCulture = System.Globalization.CultureInfo.InvariantCulture;
لیکن ظاهر کامپوننت طراحی شده توسط شما بصورت تاریخ میلادی تغییر می کند که جای اصلاح دارد

plus
چهارشنبه 12 خرداد 1395, 23:13 عصر
دوست عزیز (Plus) سلام.

وقتی از این DateTimePicker در ویندوز 10 با تاریخ تنظیم شده به فرمت شمسی استفاده میشه کد زیر برای ذخیره در دیتا بیس مقدار فارسی را برمیگرداند


MessageBox.Show(dateTimeSelector1.Value.ToString() );


البته DateTimePicker استاندارد موجود در ویژوال استدیو نیز همین رفتار را نشان می دهد که با قطعه کد ذیل در روال Form_Load قابل حل می باشد.


System.Threading.
Thread.CurrentThread.CurrentCulture = System.Globalization.CultureInfo.InvariantCulture;


لیکن ظاهر کامپوننت طراحی شده توسط شما بصورت تاریخ میلادی تغییر می کند که جای اصلاح دارد

با سلام،

متد ToString مشخصه Value که از نوع DateTime هست مربوط به .NET Framework هست و ربطی به این کنترل نداره. شما اگر تاریخ رو با فرمت میلادی میخواید بجای تغيير Culture ترد جاري كه همه چیز رو تغییر میده کافیه به صورت زیر InvariantCulture رو به متد ToString ارسال کنید:

DateTime? value = dateTimeSelector1.Value;
if (value.HasValue) {
MessageBox.Show(value.Value.ToString(CultureInfo.I nvariantCulture));
}

A3ed.BlackHat
چهارشنبه 16 تیر 1395, 23:14 عصر
سلام
اول بابت کامپوینتت خوبتون تشکر میکنم
یه سوال داشتم میخوام با این کامپیونت داده های بین دو تاریخ رو بدست بیارم و توی datagridview نمایش بدم
نوع تاریخ توی دیتابیس به صورت data هست
از کد زیر استفاده میکنم ولی ارور زیر رو میده
The parameterized query '(@dateTimeSelectorBetween1 nvarchar(4000),@dateTimeSelectorBetwe' expects the parameter '@dateTimeSelectorBetween1', which was not supplied.


SqlDataAdapter da = new SqlDataAdapter(@"
Select * from Tlb_Conversation where data Between '@dateTimeSelectorBetween1' and '@dateTimeSelectorBetween2'
", sqlConnection);
da.SelectCommand.CommandType = CommandType.Text;
da.SelectCommand.Parameters.AddWithValue("@dateTimeSelectorBetween1", dateTimeSelectorBetween1.Value);
da.SelectCommand.Parameters.AddWithValue("@dateTimeSelectorBetween2", dateTimeSelectorBetween2.Value);

DataSet ds = new DataSet();

da.Fill(ds);
DegConversation.DataSource = ds.Tables[0].DefaultView;

plus
جمعه 18 تیر 1395, 16:31 عصر
سلام
اول بابت کامپوینتت خوبتون تشکر میکنم
یه سوال داشتم میخوام با این کامپیونت داده های بین دو تاریخ رو بدست بیارم و توی datagridview نمایش بدم
نوع تاریخ توی دیتابیس به صورت data هست
از کد زیر استفاده میکنم ولی ارور زیر رو میده
The parameterized query '(@dateTimeSelectorBetween1 nvarchar(4000),@dateTimeSelectorBetwe' expects the parameter '@dateTimeSelectorBetween1', which was not supplied.


SqlDataAdapter da = new SqlDataAdapter(@"
Select * from Tlb_Conversation where data Between '@dateTimeSelectorBetween1' and '@dateTimeSelectorBetween2'
", sqlConnection);
da.SelectCommand.CommandType = CommandType.Text;
da.SelectCommand.Parameters.AddWithValue("@dateTimeSelectorBetween1", dateTimeSelectorBetween1.Value);
da.SelectCommand.Parameters.AddWithValue("@dateTimeSelectorBetween2", dateTimeSelectorBetween2.Value);

DataSet ds = new DataSet();

da.Fill(ds);
DegConversation.DataSource = ds.Tables[0].DefaultView;

با سلام. شما هر مقدار تاریخ دیگه ای که جای مقادیر گرفته شده از کنترل بگذارین (برای مثال، DateTime.Now) هم همین خطا رو دریافت میکنید، موضوع ربطی به کنترل نداره. دقیقا برای من مشخص نیست مشکل چیه، شاید نیاز به single quote (') اطراف پارامتر نیست و یا نوع داده ستون data تاریخ نیست. اگه خطا رو در یک تاپیک مجزا مطرح کنید دوستان میتونن بهتر کمک کنن.

A3ed.BlackHat
دوشنبه 21 تیر 1395, 14:58 عصر
با سلام. شما هر مقدار تاریخ دیگه ای که جای مقادیر گرفته شده از کنترل بگذارین (برای مثال، DateTime.Now) هم همین خطا رو دریافت میکنید، موضوع ربطی به کنترل نداره. دقیقا برای من مشخص نیست مشکل چیه، شاید نیاز به single quote (') اطراف پارامتر نیست و یا نوع داده ستون data تاریخ نیست. اگه خطا رو در یک تاپیک مجزا مطرح کنید دوستان میتونن بهتر کمک کنن.
سلام
بله مشکل از ' بود برداشتم درست کار کرد
تشکر

vB.N3T
یک شنبه 27 تیر 1395, 14:29 عصر
مهندس جان من میخام تاریخ این کامپوننتت رو دستی به این تاریخ تغیر بدم dateTimeSelector4.Text = "1395/00/00";
ولی قبول نمیکنه یعنی هیچ اتفاقی نمیافته.باید چیکار کرد بشه این تاریخ رو بهش ست کرد
یه سوال دیگم دارم در برنامم در فرم اصلیم این کامپونتت رو دارم..بخوام در فرم های دیگه به سال این کامپونتت دسترسی داشته باشم باید چیکار کرد
ممنون

plus
دوشنبه 18 مرداد 1395, 13:45 عصر
مهندس جان من میخام تاریخ این کامپوننتت رو دستی به این تاریخ تغیر بدم dateTimeSelector4.Text = "1395/00/00";
ولی قبول نمیکنه یعنی هیچ اتفاقی نمیافته.باید چیکار کرد بشه این تاریخ رو بهش ست کرد
یه سوال دیگم دارم در برنامم در فرم اصلیم این کامپونتت رو دارم..بخوام در فرم های دیگه به سال این کامپونتت دسترسی داشته باشم باید چیکار کرد
ممنون

سلام،

تاریخی که مد نظرتون هست غیر معتبر هست و امکان انتساب چنین تاریخی وجود نداره. در مورد دسترسی به یک کنترل از فرمهای دیگه هم، در این مورد زیاد سوال شده. اینجا (http://stackoverflow.com/questions/4822980/how-to-access-a-form-control-for-another-form) رو هم میتونید بررسی کنید.

aliramazani
پنج شنبه 20 آبان 1395, 14:59 عصر
این کامپوننت بهترین کامپوننت موجودی که باهاش کار کردم

Imenam
پنج شنبه 23 دی 1395, 15:49 عصر
سلام
یه مشکلی تو ویندوز 10 برام به وجود اومده!

تو ویندوز 10 وقتی تنظیمات روی تاریخ شمسی باشه تاریخ تو این کامپوننت برعکس نشون داده میشه و تمامی اطلاعاتی که ثبت شده هم تو بانک با این فرمت ثبت شده که دردسر بزرگی ایجاد کرده و هنگام جستجو این تاریخ ها را اصلا در نظر نمیگیره
تو شکل زیر اون تاریخی که با رنگ زرد نشون دادم دقیقا چیزی هست که تو ویندوز 10 با تنظیمات تقویم شمسی اتفاق میفته...به نظرتون باید چی کار کنم تا تاریخ تو این کامپوننت درست نشون داده بشه؟ و اطلاعاتی که تو بانک ذخیره شده را چطور اصلاح کنم؟
144130

aliramazani
پنج شنبه 23 دی 1395, 18:12 عصر
سلام
یه مشکلی تو ویندوز 10 برام به وجود اومده!

تو ویندوز 10 وقتی تنظیمات روی تاریخ شمسی باشه تاریخ تو این کامپوننت برعکس نشون داده میشه و تمامی اطلاعاتی که ثبت شده هم تو بانک با این فرمت ثبت شده که دردسر بزرگی ایجاد کرده و هنگام جستجو این تاریخ ها را اصلا در نظر نمیگیره
تو شکل زیر اون تاریخی که با رنگ زرد نشون دادم دقیقا چیزی هست که تو ویندوز 10 با تنظیمات تقویم شمسی اتفاق میفته...به نظرتون باید چی کار کنم تا تاریخ تو این کامپوننت درست نشون داده بشه؟ و اطلاعاتی که تو بانک ذخیره شده را چطور اصلاح کنم؟
144130

موقع ذخیره توی دیتابیس با این فرمت اطلاعات را بگیرید:


dateTimepicker1.GetText("yyyy/DD/mm");

plus
شنبه 02 بهمن 1395, 20:23 عصر
سلام
یه مشکلی تو ویندوز 10 برام به وجود اومده!

تو ویندوز 10 وقتی تنظیمات روی تاریخ شمسی باشه تاریخ تو این کامپوننت برعکس نشون داده میشه و تمامی اطلاعاتی که ثبت شده هم تو بانک با این فرمت ثبت شده که دردسر بزرگی ایجاد کرده و هنگام جستجو این تاریخ ها را اصلا در نظر نمیگیره
تو شکل زیر اون تاریخی که با رنگ زرد نشون دادم دقیقا چیزی هست که تو ویندوز 10 با تنظیمات تقویم شمسی اتفاق میفته...به نظرتون باید چی کار کنم تا تاریخ تو این کامپوننت درست نشون داده بشه؟ و اطلاعاتی که تو بانک ذخیره شده را چطور اصلاح کنم؟
144130


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

mohammadmowlavi
جمعه 22 بهمن 1395, 14:20 عصر
سلام اگر میشد این ارتفاع این کنترل رو هم تغییر داد خیلی خوب میشد!

plus
یک شنبه 01 اسفند 1395, 11:01 صبح
سلام اگر میشد این ارتفاع این کنترل رو هم تغییر داد خیلی خوب میشد!

با سلام،

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

vB.N3T
یک شنبه 01 اسفند 1395, 13:15 عصر
مهندس ورژن تحت وب ASP نمیدید؟؟؟

mandagarana
یک شنبه 01 اسفند 1395, 16:13 عصر
با سلام
لطفا اگه میشه نسخه نهایی رو یک بار دیگه آپلود کنید.
در ضمن ممنون میشم یه مثال از مقایسه تاریخ ها بزنید.مثلا یه جدول داریم که توش یه ستون از نوع تاریخ هستش.میخایم از فلان تاریخ تا فلان تاریخ رو براون بیاره

plus
سه شنبه 03 اسفند 1395, 16:39 عصر
مهندس ورژن تحت وب ASP نمیدید؟؟؟

متاسفانه چنین برنامه ای ندارم.


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

همه نسخه ها در Github که لینکش در پست اول هست قابل دریافت هست. در مورد مقایسه تاریخ...به نظرم ربطی به یک کنترل نمایش و دریافت تاریخ و یا جدول دیتابیس نداره.

mohammadmowlavi
شنبه 28 اسفند 1395, 20:54 عصر
سلام و عرض تشکر بله اضافه میشه ارتفاع ولی در واحدهای کوانتومی و نه هر واحدی که ما نیاز داشته باشیم وقتی شما دریک فرم استاتدارد ارتفاع جعبه هاتو یک عدد استاندارد میگیری و نمیتونی این کنترل رو با اونا هم ارتفاع کنی فرمت فرمت بهم میریزه

plus
یک شنبه 29 اسفند 1395, 14:11 عصر
سلام و عرض تشکر بله اضافه میشه ارتفاع ولی در واحدهای کوانتومی و نه هر واحدی که ما نیاز داشته باشیم وقتی شما دریک فرم استاتدارد ارتفاع جعبه هاتو یک عدد استاندارد میگیری و نمیتونی این کنترل رو با اونا هم ارتفاع کنی فرمت فرمت بهم میریزه

سلام،

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

mohammadmowlavi
دوشنبه 22 آبان 1396, 09:09 صبح
اینم خدمت شما147039

plus
جمعه 17 آذر 1396, 20:25 عصر
اینم خدمت شما147039
ممنون از شما.

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

mohammadmowlavi
پنج شنبه 23 آذر 1396, 16:11 عصر
خب اینو واسه نمونه گذاشتم شما استاد مایید بهتر میدونید بعضی از فونتای فارسی اندازه هاشون استاندارد نیست و ممکن به خوبی داخل جعبه متن نمایش داده نشه و ما مجبور به استفاده از عرض های سفارشی میشیم
با تشکر

plus
شنبه 25 آذر 1396, 20:16 عصر
خب اینو واسه نمونه گذاشتم شما استاد مایید بهتر میدونید بعضی از فونتای فارسی اندازه هاشون استاندارد نیست و ممکن به خوبی داخل جعبه متن نمایش داده نشه و ما مجبور به استفاده از عرض های سفارشی میشیم
با تشکر

نیازتون راجع به عدم استاندارد بودن بعضی از فونت های فارسی قابل درکه ولی به دلیل خاص بودن یک چنین نیازی، پیاده نشده. پروژه open-source هست و اگه علاقه و حوصله داشته باشید میتونید خودتون پیاده کنید.

mohammadmowlavi
جمعه 22 دی 1396, 07:27 صبح
به هرحال تشکر بسیار از وقتی که میگذارین

sldvhlds
یک شنبه 14 مرداد 1397, 10:06 صبح
این کامپوننت بهترین کامپوننت موجودی که باهاش کار کردم

bmvgod
دوشنبه 01 بهمن 1397, 22:32 عصر
همونطور که میدونید، برای حل مشکل انتخاب و نمایش تاریخ با تقویم فارسی، کنترل‌‌های مختلفی توسط توسعه دهنده‌های ایرانی برای WinForms ساخته شده. من خیلی از اون‌‌ها رو بررسی کردم ولی اغلب مشکلات زیادی دارن و حتی اون‌های هم که open-source هستن نیاز به کار زیادی برای بهبود دارن. بعضی مشکلاتی که من تا به حال دیدم این‌ها هستند:
- اختصاصی برای تقویم شمسی؛ این کنترل‌ها مختص تقویم شمسی ایجاد شدن و قابلیت کار با تقویم غیر از شمسی رو ندارن. بنابراین اگه لازم بشه در نرم افزاری تقویم شمسی در کنار تقویم میلادی مورد استفاده قرار بگیره کاربردی ندارن.
- فرمت ثابت؛ این کنترل‌ها اغلب برای فقط دریافت تاریخ، اون هم در فرمت ثابتی مثل yyyy/MM/dd طراحی شدن بنابراین نه تنها امکان دریافت زمان در کنار (و یا بدون) تاریخ فراهم نیست، بلکه فقط قادر هستن تاریخ رو با فرمت ثابت دریافت کنن. برای مثال اگه شما بخواهید کاربر مؤلفه سال رو به صورت دو رقمی، نه چهار رقمی وارد کنه، این کنترل‌‌ها توانایی مانور در این زمینه رو ندارند.
- عدم پشتیبانی صحیح از کیبرد و موس به صورت کامل و صحیح؛
- واسط کاربری غیر استاندارد؛ همه کنترل‌هایی که من تا به حال دیدم از واسط کاربری غیر استاندارد رنج می‌برن. مشکلاتی از قبیل استفاده از فونت ها و رنگ‌های خاص و غیر قابل تغییر، اندازه‌‌های نامناسب و ثابت و… .

DateTimeSelector

کنترل DateTimeSelector با هدف پشتیبانی کامل از تقویم شمسی و میلادی (و سایر تقویم‌ها، با احتمالا کمی بهبود) نوشته شده و سعی شده که مشکلاتی که در مورد DateTimePicker‌ و همچنین مشکلات نمونه‌های مشابه ایرانی که بهش اشاره کردم رو نداشته باشه. در واقعه، ویژگی‌های این کنترل، نداشتن مشکلاتی هست که بهش اشاره شد:

- پشتیبانی کامل از تقویم شمسی و میلادی (و سایر تقویم‌ها، با احتمالا کمی بهبود)
- پشتیبانی از مقدار null (خالی) برای مقدار
- امکان انتخاب زمان، تاریخ و یا هر دو
- امکان تغییر فونت و جهت (Direction)
- امکان تغییر رنگ‌ها
- طراحی گرافیکی منطبق بر Style ویندوز و برنامه
- پشتیبانی مناسب از کیبرد و موس*
- رسم با سرعت بالا بدون Flicker
- open-source و تحت لیسانس MIT
- و…

* در زمینه پشتیبانی کامل از موس و کیبرد کمی جای کار داره
چند Screenshot از این کنترل:
127866127867127868
پروژه در Github (https://github.com/mchehraz/datetimeselector)
دانلود سورس و یا باینری (DLL) از Github (https://github.com/mchehraz/datetimeselector/releases)
لینک مطلب کامل در وبلاگ من (http://blog.mchehraz.com/?p=57)

* هنوز فرصت به توضیح کامل مشخصات و نحوه استفاده از اون نکردم. سوالاتتون رو میتونید در همین تاپیک یا پست لینک شده در وبلاگ بپرسید.
* ویراست 1.1.2 ارسال شد.

با عرض سلام و خسته نباشید
من dll رو به برنامه اضافه کردم و وقتی کامپوننت رو روی فرم میندازم خطالی زیر رو بهم میده:
149664

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

NasimBamdad
سه شنبه 02 بهمن 1397, 01:26 صبح
.Net Framework رو بر روی 4 قرار بدید و مجدد Build کنید

mahmood744
دوشنبه 22 بهمن 1397, 01:49 صبح
سلام
کامپونت بسیار خوبی است
واقعا خسته نباشید:تشویق:

من چهار تا نکته برای بهبود این کامپونت دارم

اول اینکه این کامپونت با جهت ها خوب فوکوس می کند اما اگر با Enter میشود از روز به ما و سال فوکوس کند عالی میشد
و یا از سال به ماه و روز و با کلید Esc برعس حرکت می کرد عای بود

دوم اینکه دو تا فونت می گرفت . یکی برای Textbox و یکی برای جدول تقویم
بعضی موقع ها می خواهد TextBox را با فونت بزرگ نمایش بدی اجبارا تقویم هم بزرگ می شود

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

چهارم اینکه این ظاهر هم بد نیست . ماه و سال جدا از هم باشند , بنظرم کاربردی تر باشد و در سیستم تاچ ماه و سال راحت تر عوض می شود و خوانا تر است
149773

با تشکر از زحمات شما :تشویق::تشویق::تشویق:

plus
سه شنبه 30 بهمن 1397, 14:03 عصر
ممنون از پیشنهادات شما. انشالا که شخص خیری پیدا بشه و بهبودهای مورد نیاز رو برای این پروژه بده. متاسفانه فعلا فرصتی برای توسعه این پروژه ندارم!

mrali.jalali
جمعه 03 اسفند 1397, 09:48 صبح
این تقویم را کسی داره بگذاره ؟

plus
شنبه 10 فروردین 1398, 17:13 عصر
این تقویم را کسی داره بگذاره ؟

منظورتون رو متوجه نمیشم. لینک دانلود کنترل در صفحه اول هست...

ji ming u
جمعه 16 فروردین 1398, 09:49 صبح
چجوری میشه با اینتر فوکوس کرد بجای تب؟

plus
جمعه 16 فروردین 1398, 15:56 عصر
چجوری میشه با اینتر فوکوس کرد بجای تب؟

باید سورس کد رو تغییر بدید. در فایل DateTimeSelector.cs خط 1100 متد ProcessDialogKey میتونید عملکرد Tab رو با Enter عوض کنید.

sikhora
جمعه 20 اردیبهشت 1398, 14:20 عصر
سلام خسته نباشید
ببخشید وقتی این کنترل رو باز میکنم از همون اول قمری هستش
کجا باید باید شمسیش کنم؟

Shadow_net
جمعه 20 اردیبهشت 1398, 20:44 عصر
سلام خسته نباشید
ببخشید وقتی این کنترل رو باز میکنم از همون اول قمری هستش
کجا باید باید شمسیش کنم؟
کامپوننت های تاریخ از تاریخ سیستم استفاده میکنند احتمالاً مشکل از تنظیمات سیستمتون هست

piman_biabani
سه شنبه 09 آذر 1400, 16:23 عصر
سلام من چطور میتونم لایسنس ateTimePickr فقعال کنم در پروژم

plus
پنج شنبه 25 آذر 1400, 02:58 صبح
سلام من چطور میتونم لایسنس ateTimePickr فقعال کنم در پروژم
سلام،
سورس کد این کنترل تحت لایسنس MIT منتشر شده و نیازی نیست کار خواصی در رابطه با لایسنس انجام بدین.