كيف يمكنني جعل الخاص DateTimePicker عرض سلسلة فارغة؟

StackOverflow https://stackoverflow.com/questions/846395

  •  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;
            }
        }

عند حالها

عند فحص

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top