كيف يمكنني جعل الخاص DateTimePicker عرض سلسلة فارغة؟
-
21-08-2019 - |
سؤال
وأود أن تكون قادرة على عرض DateTimePicker
أن له قيمة افتراضية من لا شيء، أي موعد لذلك.
وعلى سبيل المثال، لدي dtTaskStart
تاريخ البدء وdtTaskEnd
تاريخ انتهاء مهمة، ولكن التاريخ نهاية غير معروفة، وليس بالسكان في البداية.
ولقد حددت تنسيق مخصص من yyyy-MM-dd
لكل من الضوابط.
وتعيين القيمة إلى null
، أو سلسلة فارغة في وقت التشغيل يسبب خطأ، فكيف يمكنني تحقيق ذلك؟
ولقد نظرت باستخدام مربع للسيطرة على تمكين هذا الحقل، ولكن لا يزال هناك مسألة عرض قيمة أولية ..
تحرير: م>
يمكن القول نسخة مكررة من السؤال الخاص DateTimePicker قيمة خالية (.NET) ، ولكن الحل وجدت ل مشكلتي ليست حلا لهذا السؤال، لذلك أعتقد أنه يجب أن تبقى هنا للآخرين لتجد ..
المحلول 2
والتشويش قيمة باستخدام الخاصية CustomFormat
، وذلك باستخدام مربع cbEnableEndDate
كما علم للإشارة إلى ما إذا كان رمز آخر يجب تجاهل القيمة:
If dateTaskEnd > Date.FromOADate(0) Then
dtTaskEnd.Format = DateTimePickerFormat.Custom
dtTaskEnd.CustomFormat = "yyyy-MM-dd"
dtTaskEnd.Value = dateTaskEnd
dtTaskEnd.Enabled = True
cbEnableEndDate.Checked = True
Else
dtTaskEnd.Format = DateTimePickerFormat.Custom
dtTaskEnd.CustomFormat = " "
dtTaskEnd.Value = Date.FromOADate(0)
dtTaskEnd.Enabled = False
cbEnableEndDate.Checked = False
End If
نصائح أخرى
ومجرد تعيين الخاصية كما يلي:
عند الصحافة المستخدم زر "واضح" أو "حذف مفتاح" لا
dtpData.CustomFormat = " " 'An empty SPACE
dtpData.Format = DateTimePickerFormat.Custom
في الحدث DateTimePicker1_ValueChanged
تفعل
dtpData.CustomFormat = "dd/MM/yyyy hh:mm:ss"
وهذا العمل بالنسبة لي لج #
if (enableEndDateCheckBox.Checked == true)
{
endDateDateTimePicker.Enabled = true;
endDateDateTimePicker.Format = DateTimePickerFormat.Short;
}
else
{
endDateDateTimePicker.Enabled = false;
endDateDateTimePicker.Format = DateTimePickerFormat.Custom;
endDateDateTimePicker.CustomFormat = " ";
}
وطيف واحد الرجال!
في حالة أي شخص لديه مشكلة مع وضع الخاص DateTimePicker السيطرة إلى فارغة خلال الحدث تحميل النموذج، ومن ثم تظهر التاريخ الحالي حسب الحاجة، وهنا مثال:
وتأكد من أن CustomFormat = " "
لديها نفس العدد من مسافات (مسافة واحدة على الأقل) في كلتا الطريقتين
Private Sub setDateTimePickerBlank(ByVal dateTimePicker As DateTimePicker)
dateTimePicker.Visible = True
dateTimePicker.Format = DateTimePickerFormat.Custom
dateTimePicker.CustomFormat = " "
End Sub
Private Sub dateTimePicker_MouseHover(ByVal sender As Object, ByVal e As
System.EventArgs) Handles dateTimePicker.MouseHover
Dim dateTimePicker As DateTimePicker = CType(sender, DateTimePicker)
If dateTimePicker.Text = " " Then
dateTimePicker.Text = Format(DateTime.Now, "MM/dd/yyyy")
End If
End Sub
وعندما كنت ترغب في عرض قيمة تاريخ فارغة أفعل هذا
if (sStrDate != "")
{
dateCreated.Value = DateTime.Parse(sStrDate);
}
else
{
dateCreated.CustomFormat = " ";
dateCreated.Format = DateTimePickerFormat.Custom;
}
وبعد ذلك عندما ينقر المستخدم على السيطرة لدي هذا:
private void dateControl_MouseDown(object sender, MouseEventArgs e)
{
((DateTimePicker)sender).Format = DateTimePickerFormat.Long;
}
وهذا يسمح لك لعرض واستخدام قيمة تاريخ فارغة، ولكن لا تزال تسمح للمستخدم لتكون قادرة على تغيير التاريخ إلى شيء عندما رغبوا في ذلك.
ونضع في اعتبارنا أن sStrDate قد تم التحقق من صحة كسلسلة تاريخ صالحة.
والمفهوم الأساسي هو نفسه قال من قبل الآخرين. ولكن من الأسهل لتنفيذ هذه الطريقة عندما يكون لديك الخاص DateTimePicker متعددة.
dateTimePicker1.Value = DateTime.Now;
dateTimePicker1.ValueChanged += new System.EventHandler(this.Dtp_ValueChanged);
dateTimePicker1.ShowCheckBox=true;
dateTimePicker1.Checked=false;
dateTimePicker2.Value = DateTime.Now;
dateTimePicker2.ValueChanged += new System.EventHandler(this.Dtp_ValueChanged);
dateTimePicker2.ShowCheckBox=true;
dateTimePicker2.Checked=false;
وقيمة تغير الدالة الحدث
void Dtp_ValueChanged(object sender, EventArgs e)
{
if(((DateTimePicker)sender).ShowCheckBox==true)
{
if(((DateTimePicker)sender).Checked==false)
{
((DateTimePicker)sender).CustomFormat = " ";
((DateTimePicker)sender).Format = DateTimePickerFormat.Custom;
}
else
{
((DateTimePicker)sender).Format = DateTimePickerFormat.Short;
}
}
else
{
((DateTimePicker)sender).Format = DateTimePickerFormat.Short;
}
}