سؤال

هل يوجد محرر مضمن لسلسلة متعددة الأسطر في ملف PropertyGrid.

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

المحلول

لقد وجدت ذلك System.Design.dll لديه System.ComponentModel.Design.MultilineStringEditor والتي يمكن استخدامها على النحو التالي:

public class Stuff
{
    [Editor(typeof(MultilineStringEditor), typeof(UITypeEditor))]
    public string MultiLineProperty { get; set; }
}

نصائح أخرى

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

العيب الوحيد الذي وجدته هو أنني بحاجة لتزيين خاصية السلسلة المحددة بسمة محددة.لقد مرت فترة من الوقت منذ أن اضطررت للقيام بذلك.حصلت على هذه المعلومات من كتاب لكريس سيلز بعنوان "برمجة نماذج Windows في C#"

هناك شبكة عقارات تجارية تسمى سمارت بروبرتيغريد.نت بواسطة فيسوال هينت.

نعم.لا أتذكر تمامًا كيف تم تسميته، ولكن انظر إلى محرر خصائص العناصر للحصول على شيء مثل ComboBox

تم التعديل:اعتبارًا من @fryguybob، يستخدم ComboBox.Items System.Windows.Forms.Design.ListControlStringCollectionEditor

نحتاج إلى كتابة محررنا المخصص للحصول على دعم متعدد الأسطر في شبكة الخصائص.

فيما يلي فئة محرر نصوص العميل التي تم تنفيذها من UITypeEditor

public class MultiLineTextEditor : UITypeEditor
{
    private IWindowsFormsEditorService _editorService;

    public override UITypeEditorEditStyle GetEditStyle(ITypeDescriptorContext context)
    {
        return UITypeEditorEditStyle.DropDown;
    }

    public override object EditValue(ITypeDescriptorContext context, IServiceProvider provider, object value)
    {
        _editorService = (IWindowsFormsEditorService)provider.GetService(typeof(IWindowsFormsEditorService));

        TextBox textEditorBox = new TextBox();
        textEditorBox.Multiline = true;
        textEditorBox.ScrollBars = ScrollBars.Vertical;
        textEditorBox.Width = 250;
        textEditorBox.Height = 150;
        textEditorBox.BorderStyle = BorderStyle.None;
        textEditorBox.AcceptsReturn = true;
        textEditorBox.Text = value as string;

        _editorService.DropDownControl(textEditorBox);

        return textEditorBox.Text;
    }
}

اكتب شبكة الخصائص المخصصة الخاصة بك وقم بتطبيق سمة المحرر هذه على الخاصية

class CustomPropertyGrid
{
    private string multiLineStr = string.Empty;

    [Editor(typeof(MultiLineTextEditor), typeof(UITypeEditor))]
    public string MultiLineStr
    {
        get { return multiLineStr; }
        set { multiLineStr = value; }
    }
}

في النموذج الرئيسي قم بتعيين هذا الكائن

 propertyGrid1.SelectedObject = new CustomPropertyGrid();
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top