PDA

View Full Version : تغییر تاریخ شمسی درون maskedtextbox برحسب تاریخ دیگر



ssadegh1365
پنج شنبه 21 اسفند 1399, 19:41 عصر
خیلی ممنون تا شنبه به سیستم دسترسی ندارم تا امتحانش کنم. خیلی شرمندم یه مشکل دگه دارم و عرض کنم خدمت شما
تو یه تکست باکس تاریخ شمسی رو که تو دیتابیس نوعش long گذاشتم، وارد میکنم و از طریق ماسک تکست باکس فرمت 0000/00/00 بهش دادم و موقع ذخیره تو بانک تبدیل به لانگ میکنم و درست ذخیره میشه. حالا تو یه تکست باکس دیگه میخوام اون تاریخ اوله رو که گفتم ، یه روز بهش اضافه کنم بمحض وارد کردن تاریخ در تکست اول.
اول عدد سال و ماه و روزش رو تویه متغیر گذاشتم و بعد به تاریخ شمسی تبدیل کردم با کامپوننت مخصوص.حالا که میخوام به این تاریخه تبدیل شده یه روژ اضافه کنم خطا میده.
بازم اون سه متغیر رو تو رشته گذاشتم و میام تبدیل به تاریخ کنم بازم خطا میده. نمونه کد زیادی هم امتحان کردم.
اگه میشه شماهم یه راهنمایی و نمونه کدی برام بفرستین خیلی ممنون میشم.
با تشکر

ssadegh1365
پنج شنبه 21 اسفند 1399, 19:43 عصر
مشکلم اینه که تو تکست دوم میخوام ماسک بدم مثه همون اولش. با ماسک نمیشه و خطا میده

the king
پنج شنبه 21 اسفند 1399, 20:58 عصر
خیلی ممنون تا شنبه به سیستم دسترسی ندارم تا امتحانش کنم. خیلی شرمندم یه مشکل دگه دارم و عرض کنم خدمت شما
تو یه تکست باکس تاریخ شمسی رو که تو دیتابیس نوعش long گذاشتم، وارد میکنم و از طریق ماسک تکست باکس فرمت 0000/00/00 بهش دادم و موقع ذخیره تو بانک تبدیل به لانگ میکنم و درست ذخیره میشه. حالا تو یه تکست باکس دیگه میخوام اون تاریخ اوله رو که گفتم ، یه روز بهش اضافه کنم بمحض وارد کردن تاریخ در تکست اول.
اول عدد سال و ماه و روزش رو تویه متغیر گذاشتم و بعد به تاریخ شمسی تبدیل کردم با کامپوننت مخصوص.حالا که میخوام به این تاریخه تبدیل شده یه روژ اضافه کنم خطا میده.
بازم اون سه متغیر رو تو رشته گذاشتم و میام تبدیل به تاریخ کنم بازم خطا میده. نمونه کد زیادی هم امتحان کردم.
اگه میشه شماهم یه راهنمایی و نمونه کدی برام بفرستین خیلی ممنون میشم.
با تشکر

فرضا یک maskedTextBox1 داریم که Mask اش 0000/00/00 ئه :

maskedTextBox1.Mask = "0000/00/00";


و یک تاریخ از جایی میخوانید که بصورت عدد long ذخیره شده، نمیدونم این long فرمولش چیه، انواع فرمول های تبدیل تاریخ به عدد هست :

var n = DateTime.Now.ToBinary();


var n = DateTime.Now.ToFileTime();


var n = DateTime.Now.ToFileTimeUtc();


var n = DateTime.Now.Ticks;

ولی به هر حال یک عدد long ئه.
و این عدد رو داخل maskedTextBox1 با تقویم شمسی نمایش می دهیم :

var n = DateTime.Now.Ticks;
var persian = new System.Globalization. PersianCalendar();
var date = new DateTime(n);
maskedTextBox1.Text = string.Format( "{0:0000}/{1:00}/{2:00}", persian.GetYear( date), persian.GetMonth( date), persian.GetDayOfMonth( date));


var n = DateTime.Now.ToBinary();
var persian = new System.Globalization. PersianCalendar();
var date = DateTime.FromBinary( n);
maskedTextBox1.Text = string.Format( "{0:0000}/{1:00}/{2:00}", persian.GetYear( date), persian.GetMonth( date), persian.GetDayOfMonth( date));


var n = DateTime.Now. ToFileTime();
var persian = new System.Globalization. PersianCalendar();
var date = DateTime.FromFileTime( n);
maskedTextBox1.Text = string.Format( "{0:0000}/{1:00}/{2:00}", persian.GetYear( date), persian.GetMonth( date), persian.GetDayOfMonth( date));

و ...
و برای رخداد تغییر مقدار maskedTextBox1 هم کدی می نویسیم که در maskedTextBox2 روز بعد رو نشون بده، به AddDays(1) توجه کنید :

private void maskedTextBox1_TextChanged(object sender, EventArgs e)
{
if (maskedTextBox1.MaskCompleted)
{
try
{
var args = maskedTextBox1.Text. Split('/');
var year = int.Parse( args[0]);
var month = int.Parse( args[1]);
var day = int.Parse( args[2]);
var persian = new System.Globalization. PersianCalendar();
var date = persian.ToDateTime( year, month, day, 0, 0, 0, 0).AddDays(1);
maskedTextBox2.Text = string.Format( "{0:0000}/{1:00}/{2:00}", persian.GetYear( date), persian.GetMonth( date), persian.GetDayOfMonth( date));
return;
}
catch
{
}
}
maskedTextBox2.Text = "";
}

ssadegh1365
سه شنبه 26 اسفند 1399, 17:29 عصر
مرسی از پاسخ شما . کارم راه افتاد.