چطوری تاریخ رو بهش میشه پاس داد من میخوام تاریخ رو از یه متغیر و یا .... بگیرم
چطوری تاریخ رو بهش میشه پاس داد من میخوام تاریخ رو از یه متغیر و یا .... بگیرم
اگه مقدار شما از نوع DateTime هست، اون رو به مشخصه Value نسبت بدین:
DateTime dateTime = DateTime.Now
dateTimeSelector1.Value = dateTime;
و اگه از نوع رشته هست به مشخصه Text نسبت بدین. البته باید فرمت رشته با فرمت کنترل تطابق داشته باشه و گرنه مقدار برابر با null میشه. اگ مشخصه UsePersianFormat برابر True باشه، فرمت پیشفرض yyyy/MM/dd هست.
string dateTime = "1390/10/14";
dateTimeSelector1.Text = dateTime;
مشخصه text نداره !!!
اگر خاصیت Style رو روی List بزاریم و UsePersianFormat هم true باشه و خاصیت Fromat رو روی Long بزاریم ماه رو به صورت میلادی و بقیه تاریخ رو درست نشون میده..
32.png
در ضمن اگر یک خاصیت جدید برای اینکه بتونیم قالب برنامه رو به طرحهایی که دوستان پیشنهاد دادن (مثل پست 27 و 28 همین تایپیک) رو هم تغییر بدیم دیگه حرف نداره، البته قالب پیش فرض و هم همینطور برای کنترل های ویندوز داشته باشه در این صورت خیلی خیلی خوب میشه، البته برای کسانی مثل ما که زیاد توانایی دخل و تصرف توی کد رو نداریم میگم.
سلام وقت بخیر جسارتا اگر امکانش هست خاصیت Dock مربوط به کامپوننت رو بررسی کنید توی خاصیت Dock سمت راست و سمت چپ سایز ثابت میده و مشگل داره.
ممنونم بخاطر کامپوننت مفیدتون.
سلام
منم همچین مشکلی داشتم که Target رو برای Dot Net Framework از .Net Framework 4 Client Profile به .NetFramework 4 تغییر دادم و مشکل حل شد.
Plus عزیز خیلی خیلی ممنون از کار مفیدتون.
منم یه سوال کوچولو بپرسم با اجازه
توی یه پروژه به سرچ ترکیبی نیاز دارم و یکی از آیتم های جستجو تاریخه
برای داینامیک بودن UI برنامه میخوام به محض تغییر تاریخ نتیجه نمایش داده بشه و طبیعتاً با صفر کردن تاریخ همه ی رکوردها نمایش داده بشن
راهی هست که توی کنترل چیزی بذارم که کاربر با زدنش تاریخ رو خالی کنه؟
عالی بود
ای کاش ادامه بدین
سلام،وقت همگی بخیر
تقویم رو روی persian قرار دادم ولی موقع خروجی گرفتن تاریخ میلادی رو بر میگردونه.مشکل کجاست ؟ باید مجدد برگردونده بشه به شمسی یا خیر ؟
ممنون. کمبود جزیی داره که هرکس بخواد با کمی وقت میتونه حلش کنه. اگه یه روزی فرصت کردم تکمیلش میکنم.
مشکلی نیست، شمسی بودنش مربوط به UI هست. کنترل خروجی DateTime میده که تاریخ میلادی هست که میتونید به شمسی تبدیلش کنید و یا از مشخصه Text و یا متد GetText استفاده کنید ولی روش اول رو توصیه میکنم.
سلام.
آیا در این کامپوننت برای متمایز نمودن رنگ روزهای تعطیل سال بر اساس تقویم تعریفی خودمون راهی وجود داره؟
ممنون.
سلام ممنون بابت کاری که انجام داده اید.
لطفا راهنمایی کتید.
می خوام تو بعضی فرم ها زمان و تاریخ و باهم نشون بده و ثبت کنه چطوری تنظیم کنم تو Properties و اینکه من با لینک دارم مقدار رو به sql ارسال می کنم اما نمی دونم چطور باید تاریخ و زمان بنویسم
testform.pngsqltestform.png
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);
}
مشخصه ی 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/lib...vs.110%29.aspx
اگه ابهامی بود در خدمتم.
عملیات رسم هر روز در تقویم در متد 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 باشه که در اون استفاده کننده تعیین کنه که آیا روز مربوطه تعطیل هست یا نه...
سلام ممنون از راهنماییت.
حالا فهمیدم اما از اگه با این روش ساعت همراه با تاریخ در یک فیلد ذخیره کنیم زمان جستجو به مشکل بر میخوریم حالا ازت راهنمایی می خوام می خوام زمان جدا و تاریخ جدا باشه چکار کنم 2 باز dateTimeSelector رو در فرم اضافه کنم؟ و یکی برای زمان و یکی برای تاریخ باشه؟
و اینکه زمان رو به صورت Linq جطور ذخیره کنم ؟
یه مورد دیکه در پست 11 به Ghasem گفتی برای تاریخ به صورت شمسی در sql ذخیره شه از به کلاس استفاده کنه من راجب اون کلاس جستجو کردم ولی کارهایی که بقیه گفته بودن جواب نداد و ذخیره باز به صورت میلادی در SQL انجام میشه.
سلام. شما میتونی اگه بخوای از دو کنترل استفاده کنی ولی این کار هیچ مزیتی ایجاد نمیکنه. در حالتی که فقط از یک کنترل استفاده کنی هم میتونی تاریخ و زمان رو به صورت جدا داشته باشی و اگه بخوای به صورت جدا ذخیره کنی. خروجی کنترل یک متغیر از نوع DateTime هست که مشخصه Date اون تاریخ و مشخصه TimeOfDay اون زمان رو نگه میداره. در مورد اینکه در جستجو به مشکل میخوره هم، نمیدونم چرا اینطور فکر میکنی، هرچند این موضوع از خارج از بحث این تاپیک هست.
در مورد ذخیره زمان در Linq هم موضوع خارج از بحث تاپیک هست من هم با Linq زیاد کار نکردم، برای ذخیره تاریخ به صورت شمسی هم شما باید خروجی این کنترل رو با کلاس PersianCalendar به صورت رشته تبدیل کنی (تعداد زیادی تاپیک در این مورد هست) و بعد اون رشته رو در یک فیلد "رشته" ای مثل (char(n در SQL ذخیره کنی، نه در یک فیلد ِDateTime یا نوع های شبیه این. البته معمولا توصیه میشه که شما تاریخ رو به صورت میلادی در SQL Server دخیره کنی.
بله میتونید به میلادی ذخیره کنید و در دیتاگرید و یا هرجای دیگه به شمسی تبدیل کنید و نمایش بدین. البته برای نمایش در این کنترل نیاز به تبدیل نیست ولی برای دیتاگرید باید تبدیل کنید. اینجا توضیحاتی در این مورد دادم.
آخرین ویرایش به وسیله shaghaghi : یک شنبه 12 مهر 1394 در 14:10 عصر
چه متدی باشد باشه؟ تاپیک رو مطالعه کنید فکر میکنم توضیحات کافی باشه. اگه calendarControl رو بخواین به صورت مجزا از DateTimeSelector با تقویم شمسی استفاده کنید میتونید به این صورت این کنترل رو شمسی کنید:
calendarControl.DateTimeFormat = Atf.UI.PersianDateTimeFormat.GetPersianDateTimeFor mat();
این خطا برا چیه760109_9iNpIvrg.jpg
چطوری باید رفرنسشو اضافه کنیم
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
شما اگه بخوای از DLL کامپایل شده استفاده کنی بله، همونطور که گفتم:
و میتونید این متد (و نه Event) رو در سورس کد و البته در کلاس CalendarControl نه DateTimeSelector پیدا کنید، ویرایش کنید و dll سفارشی رو بسازید.به صورت built-in چنین امکانی پیاده سازی نشده ولی اگه شما مایل باشید که source code رو دانلود کنید و این امکان رو برای خودتون اضافه کنید من میتونم راهنمایی کنم که در چه کلاس و متدی رنگ روزهای تقویم تعیین میشه و چطور میتونید این امکان رو اضافه کنید.
سلام ضمن تشکر از زحمت شما فرض کنید کاربر بخواد تاریخ تولد رو وارد کنه چون تقویم شما قابلیت انتخاب سال رو نداره و همچنین ماه رو خیلی اذیت میشه و ترجیح میده دستی وارد کنه!
ممنون از وقتی که میزارین
سلام.
ایا میشه در wpf از این حالت گرافیکیش استفاده کرده بشه؟؟
من به یک selector گرافیکی به این صورت نیاز دارم که بشه تاریخ رو select کرد