سؤال

في VB6، لدي عنصر تحكم DTPicker في النموذج.(DTPicker هو محدد تاريخ/وقت التقويم، المضمن في Microsoft Windows Common Controls-2 6.0، والمتوفر من مربع حوار المكونات.)

على الرغم من وجود العديد من الخصائص التي تؤثر على ألوان التقويم عند إسقاطه، إلا أنه لا توجد خاصية تسمح بتغيير لون التاريخ المعروض في مربع النص.أنا أبحث عن شيء مثل خاصية ForeColor القياسية في TextBox.

هل لدى أي شخص القليل من سحر واجهة برمجة التطبيقات (API) للسماح لي بمحاكاة تلك الخاصية؟

هل كانت مفيدة؟

المحلول

وأنا أكره أن إضافة شيء غير مفيدة حقا، ولكن يبدو أن هذا شيء خارج نطاق ما المقصود مايكروسوفت للمطورين لتفعل مع عنصر التحكم. في حين يجب أن يكون هناك بالتأكيد مكالمة API لتعيين لون (ويندوز يعرف بالتأكيد لرسمه الأسود عند تمكين والرمادي عندما المعوقين)، وطريقة للقيام بذلك يهرب مني.

وتوصيتي، لا ينبغي لأحد آخر يستجيب مع كيفية القيام بما تحتاج إليه، هو إما الحصول على التحكم الجديدة التاريخ والوقت المنتقى مع الخصائص المطلوبة (يبدو أن هناك عدد قليل من الخيارات 3rd الطرف)، أو "لفة الخاص بك الخاصة "السيطرة.

وFWIW، وجود هذه المسألة نفسها في VB.NET باستثناء يجري أن مايكروسوفت يتجاوز تحديدا (ومن ثم يخفي) خصائص ForeColor (و BackColor) ورثت من وجوه مراقبة عامة لفعل أي شيء.

نصائح أخرى

سأقوم بمعالجة مشكلتين تتعلقان بكائن DatePicker والحل البديل لهما.

  1. لا يمكنك وضع قيمة فارغة في DatePicker، مما يقودني إلى المشكلة الثانية.
  2. لا يمكنك تغيير لون الخط لجعله يبدو فارغًا على الأقل.

للحفاظ على وظيفة DatePicker والحصول على القدرة على الحصول على قيمة فارغة وخيارات تنسيق الخط العادي (الألوان، وما إلى ذلك)، استخدمت كائنين.قم أولاً بإنشاء كائن DTP وضبط العرض بحيث يمكنك فقط رؤية السهم المنسدل.بالنسبة لي كان هذا 15.ثم قم بإنشاء مربع نص عادي واسع بما يكفي لاستيعاب تاريخك.ضع سهم DTP مباشرةً على يمين (أو يسار) مربع النص.ثم يمكنك ببساطة إضافة رمز إلى حدث التغيير الخاص بـ DTP لنسخ قيمته إلى نص TextBox كما يلي:

Private Sub MyDTP_Change()    
    MyUserForm.MyDateTextBox.Text = MyUserForm.MyDTP.Value
End Sub

ثم احصل على أي مراجع بيانات تحتاجها للوصول إلى MyDateTextBox.Text بدلاً من MyDTP.Value والمعزوفة!يمكنك الحصول على وظيفة DTP من خلال التحكم في التنسيق في TextBox العادي.

يحرر:آسف يا جيف، لم أكن أعمل مع VB في بيئة الإنتاج منذ 9 سنوات.:) أود إضافة الجانب الآخر من الوظيفة إلى هذا أيضًا.يسمح هذا بالمزامنة ثنائية الاتجاه بين TextBox وDTP.أي:أدخل تاريخًا يدويًا في TextBox وسيتبعه تقويم DTP.إذا كان مربع النص فارغًا أو يحتوي على تاريخ غير صالح، فسيتم تعيين DTP افتراضيًا على تاريخ اليوم.

Private Sub MyDateTextBox_Change()    
    If MyUserForm.MyDateTextBox.Text <> "" And 
    IsDate(MyUserForm.MyDateTextBox.Text) = True Then
        If CDate(MyUserForm.MyDateTextBox.Text) <= MyUserForm.MyDPT.MaxDate And _
        CDate(MyUserForm.MyDateTextBox.Text) >= MyUserForm.MyDPT.MinDate Then
            MyUserForm.MyDTP.Value = MyUserForm.MyDateTextBox.Text
        Else
            MyUserForm.MyDTP.Value = Date
        End If
    Else
        MyUserForm.MyDTP.Value = Date
    End If
End Sub
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top