سلسلة متعددة الأسطر في PropertyGrid
-
02-07-2019 - |
سؤال
هل يوجد محرر مضمن لسلسلة متعددة الأسطر في ملف 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();