كيفية تعيين أيقونة errorprovider تركت لجميع عناصر التحكم برمجيا

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

  •  30-09-2019
  •  | 
  •  

سؤال

نستخدم فئات النماذج المشتقة ، مع فئة نموذج قاعدة واحدة لبرنامجنا.

في النماذج المشتقة ، نستخدم البيانات على نطاق واسع للتعامل مع أعمالنا التجارية ، وجميعها تنفيذ idataerrorinfo ، ورمي رسائل الأخطاء المخصصة على مدخلات خاطئة إلى واجهة المستخدم الرسومية مع errorproviders.

أنا الآن أبحث عن طريقة لتنفيذ وظيفة في فئة الأساس للحصول على جميع أدوات ErrorProvider على نموذج وتعيين الأيقونات لكل عنصر تحكم على النموذج إلى اليسار (نظرًا لأن اليمين عبارة عن مشكل تباعد).

أي تلميحات مرحب بها ...

رمز لإعداد الأيقونات:

private void SetErrorProviderIconAlignment(ErrorProvider errorProvider, Control control)
{
    errorProvider.SetIconAlignment(control, ErrorIconAlignment.MiddleLeft);

    foreach (Control subControl in control.Controls)
    {
        SetErrorProviderIcon(errorProvider, subControl);
    }
}
هل كانت مفيدة؟

المحلول

استخدمنا ورثًا ErrorProvider المكون بدلاً من ذلك والذي قام بتعيين/إرجاع القوة الافتراضية للخاصية الممتدة للأيقونات.

على سبيل المثال

[ToolboxBitmap(typeof(ErrorProvider))]
[ProvideProperty("IconAlignment", typeof(Control))]
public class MyErrorProvider : ErrorProvider
{
    #region Base functionality overrides

    // We need to have a default that is explicitly different to 
    // what we actually want so that the designer generates calls
    // to our SetIconAlignment method so that we can then change
    // the base value. If the base class made the GetIconAlignment
    // method virtual we wouldn't have to waste our time.
    [DefaultValue(ErrorIconAlignment.MiddleRight)]
    public new ErrorIconAlignment GetIconAlignment(Control control)
    {
        return ErrorIconAlignment.MiddleLeft;
    }

    public new void SetIconAlignment(Control control, ErrorIconAlignment value)
    {
        base.SetIconAlignment(control, ErrorIconAlignment.MiddleLeft);
    }

    #endregion
}

ثم يمكنك بسهولة إجراء بحث/استبدال new ErrorProvider() واستبدالها new MyErrorProvider().

لا أستطيع أن أتذكر بالضبط ، ولكن قد تجد أنك قد تحتاج إلى فتح مصمم النموذج من أجل الحصول عليه لإعادة تخصيص القيمة التي تم تمريرها SetIconAlignment في ال form.designer.cs ملفات ...

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