4-PropertyGrid綁定自定義彈窗

#1- PropertyGrid概述
#2-PropertyGrid基礎(chǔ)應(yīng)用
#3-PropertyGrid綁定自定義類

1新建彈窗Form: EditDialog

1.1新建窗體:EditDialog

最大最小化屬性設(shè)置為False

1.2窗體上放一個(gè)richTextBox:richTextBox1

自定義編輯彈窗

設(shè)置richTextBox1.Modifiers = Public


richTextBox1.Modifiers

1.3修改窗體構(gòu)造函數(shù)EditDialog()

using System.Windows.Forms;

namespace PropertyGrid1
{
    public partial class EditDialog : Form
    {
        public EditDialog(object rtext)
        {
            InitializeComponent();
            richTextBox1.Text = rtext.ToString();
        }
    }
}

2重載編輯器:UITypeEditor

/// <summary>
    /// 重載 編輯器
    /// </summary>
    class MyTypeEditor : UITypeEditor
    {
        public override UITypeEditorEditStyle GetEditStyle(ITypeDescriptorContext context)
        {
            return UITypeEditorEditStyle.Modal; //...彈窗
            //return UITypeEditorEditStyle.DropDown; //下拉彈窗
        }
        public override object EditValue(ITypeDescriptorContext context, IServiceProvider provider, object value)
        {
            IWindowsFormsEditorService service = provider.GetService(typeof(IWindowsFormsEditorService)) as IWindowsFormsEditorService;
            EditDialog editForm = new EditDialog(value) { Text = "編輯富文本" };
            service.ShowDialog(editForm);
            value = editForm.richTextBox1.Text;
            return value;
        }
    }

3自定義類增加自定義編輯器

/// <summary>
    /// 自定義彈窗
    /// </summary>
    public class SysRole5
    {
        [Description("角色I(xiàn)D"), Category("角色"), DisplayName("角色I(xiàn)D")]
        public string role_id { get; set; }

        [Description("角色名稱"), Category("角色"), DisplayName("角色名稱")]
        public string role_name { get; set; }

        [Description("更新日期"), DisplayName("更新日期")]
        public DateTime d_time { get; set; }

        [Description("注釋"), DisplayName("注釋"), 
        Editor(typeof(MyTypeEditor), typeof(UITypeEditor))]
        public string s_note { get; set; }
    }

4綁定帶自定義彈窗的類

 private void button6_Click(object sender, EventArgs e)
        {
            //6自定義彈窗
            SysRole5 sr = new SysRole5() { role_id = "9998", role_name = "測(cè)試官",s_note = "富文本編輯彈窗" };
            propertyGrid1.SelectedObject = sr;
        }        

5運(yùn)行效果

自定義彈窗編輯效果

編輯修改完成掺涛,關(guān)閉彈窗庭敦,注釋屬性同步更新。

6擴(kuò)展

彈窗不只可以編輯富文本薪缆,其他任何控件都可以秧廉,如何要傳遞復(fù)雜的信息,自己定義個(gè)類或結(jié)構(gòu)即可拣帽。

7全部代碼

7.1 Form1的全部代碼

using System;
using System.ComponentModel;
using System.Windows.Forms;
using System.Drawing.Design;
using System.Windows.Forms.Design;

namespace PropertyGrid1
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        private void Form1_Load(object sender, EventArgs e)
        {
            propertyGrid1.SelectedObject = button1;
        }

        private void button0_Click(object sender, EventArgs e)
        {
            propertyGrid1.SelectedObject = button0;
        }

        private void button1_Click(object sender, EventArgs e)
        {
            //1綁定自定義類
            propertyGrid1.SelectedObject = new SysRole();

        }

        private void button2_Click(object sender, EventArgs e)
        {
            //2綁定帶分組的類
            propertyGrid1.SelectedObject = new SysRole2();
        }

        private void button3_Click(object sender, EventArgs e)
        {
            //3綁定中文顯示的類
            propertyGrid1.SelectedObject = new SysRole3();
        }

        private void button4_Click(object sender, EventArgs e)
        {
            //4綁定帶說明的類
            propertyGrid1.SelectedObject = new SysRole4();
        }

        private void button5_Click(object sender, EventArgs e)
        {
            //5初始后再綁定
            SysRole4 sr = new SysRole4() { role_id = "9998",role_name = "測(cè)試官"};
            propertyGrid1.SelectedObject = sr;
        }

        private void button6_Click(object sender, EventArgs e)
        {
            //6自定義彈窗
            SysRole5 sr = new SysRole5() { role_id = "9998", role_name = "測(cè)試官",s_note = "富文本編輯彈窗" };
            propertyGrid1.SelectedObject = sr;
        }        
    }

    /// <summary>
    /// 系統(tǒng)角色類1
    /// </summary>
    public class SysRole
    {
        public string role_id { get; set; }
        public string role_name { get; set; }
        public DateTime d_time { get; set; }
        public string s_note { get; set; }
    }

    /// <summary>
    /// 帶分組的系統(tǒng)角色類
    /// </summary>
    public class SysRole2
    {
        [Category("角色")]
        public string role_id { get; set; }
        [Category("角色")]
        public string role_name { get; set; }

        public DateTime d_time { get; set; }
        public string s_note { get; set; }
    }

    /// <summary>
    /// 中文顯示
    /// </summary>
    public class SysRole3
    {
        [Category("角色"), DisplayName("角色I(xiàn)D")]
        public string role_id { get; set; }

        [ Category("角色"), DisplayName("角色名稱")]
        public string role_name { get; set; }

        [ DisplayName("更新日期")]
        public DateTime d_time { get; set; }

        [ DisplayName("注釋")]
        public string s_note { get; set; }
    }

    /// <summary>
    /// 帶說明的類
    /// </summary>
    public class SysRole4
    {
        [Description("角色I(xiàn)D"), Category("角色"), DisplayName("角色I(xiàn)D")]
        public string role_id { get; set; }

        [Description("角色名稱"), Category("角色"), DisplayName("角色名稱")]
        public string role_name { get; set; }

        [Description("更新日期"), DisplayName("更新日期")]
        public DateTime d_time { get; set; }

        [Description("注釋"), DisplayName("注釋")]
        public string s_note { get; set; }
    }

    /// <summary>
    /// 自定義彈窗
    /// </summary>
    public class SysRole5
    {
        [Description("角色I(xiàn)D"), Category("角色"), DisplayName("角色I(xiàn)D")]
        public string role_id { get; set; }

        [Description("角色名稱"), Category("角色"), DisplayName("角色名稱")]
        public string role_name { get; set; }

        [Description("更新日期"), DisplayName("更新日期")]
        public DateTime d_time { get; set; }

        [Description("注釋"), DisplayName("注釋"), 
        Editor(typeof(MyTypeEditor), typeof(UITypeEditor))]
        public string s_note { get; set; }
    }

    /// <summary>
    /// 重載 編輯器
    /// </summary>
    class MyTypeEditor : UITypeEditor
    {
        public override UITypeEditorEditStyle GetEditStyle(ITypeDescriptorContext context)
        {
            return UITypeEditorEditStyle.Modal; //...彈窗
            //return UITypeEditorEditStyle.DropDown; //下拉彈窗
        }
        public override object EditValue(ITypeDescriptorContext context, IServiceProvider provider, object value)
        {
            IWindowsFormsEditorService service = provider.GetService(typeof(IWindowsFormsEditorService)) as IWindowsFormsEditorService;
            
            EditDialog editForm = new EditDialog(value) { Text = "編輯富文本" };
            service.ShowDialog(editForm);
            value = editForm.richTextBox1.Text;
            return value;
        }
    }
}

7.2 EditDialog的全部代碼

using System.Windows.Forms;

namespace PropertyGrid1
{
    public partial class EditDialog : Form
    {
        public EditDialog(object rtext)
        {
            InitializeComponent();
            richTextBox1.Text = rtext.ToString();
        }
    }
}

7.3 最終運(yùn)行效果

自定義彈窗最終運(yùn)行效果

(PropertyGrid教程完)

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末疼电,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子减拭,更是在濱河造成了極大的恐慌蔽豺,老刑警劉巖,帶你破解...
    沈念sama閱讀 221,198評(píng)論 6 514
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件拧粪,死亡現(xiàn)場(chǎng)離奇詭異修陡,居然都是意外死亡沧侥,警方通過查閱死者的電腦和手機(jī)坠宴,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,334評(píng)論 3 398
  • 文/潘曉璐 我一進(jìn)店門蒋失,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人裹唆,你說我怎么就攤上這事号杏∮さ” “怎么了?”我有些...
    開封第一講書人閱讀 167,643評(píng)論 0 360
  • 文/不壞的土叔 我叫張陵盾致,是天一觀的道長(zhǎng)主经。 經(jīng)常有香客問我,道長(zhǎng)庭惜,這世上最難降的妖魔是什么罩驻? 我笑而不...
    開封第一講書人閱讀 59,495評(píng)論 1 296
  • 正文 為了忘掉前任,我火速辦了婚禮护赊,結(jié)果婚禮上惠遏,老公的妹妹穿的比我還像新娘。我一直安慰自己骏啰,他們只是感情好节吮,可當(dāng)我...
    茶點(diǎn)故事閱讀 68,502評(píng)論 6 397
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著判耕,像睡著了一般透绩。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上壁熄,一...
    開封第一講書人閱讀 52,156評(píng)論 1 308
  • 那天帚豪,我揣著相機(jī)與錄音,去河邊找鬼草丧。 笑死狸臣,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的昌执。 我是一名探鬼主播烛亦,決...
    沈念sama閱讀 40,743評(píng)論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼仙蚜!你這毒婦竟也來了此洲?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,659評(píng)論 0 276
  • 序言:老撾萬榮一對(duì)情侶失蹤委粉,失蹤者是張志新(化名)和其女友劉穎呜师,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體贾节,經(jīng)...
    沈念sama閱讀 46,200評(píng)論 1 319
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡汁汗,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,282評(píng)論 3 340
  • 正文 我和宋清朗相戀三年衷畦,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片知牌。...
    茶點(diǎn)故事閱讀 40,424評(píng)論 1 352
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡祈争,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出角寸,到底是詐尸還是另有隱情菩混,我是刑警寧澤,帶...
    沈念sama閱讀 36,107評(píng)論 5 349
  • 正文 年R本政府宣布扁藕,位于F島的核電站沮峡,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏亿柑。R本人自食惡果不足惜邢疙,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,789評(píng)論 3 333
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望望薄。 院中可真熱鬧疟游,春花似錦、人聲如沸痕支。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,264評(píng)論 0 23
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽采转。三九已至聪廉,卻和暖如春瞬痘,著一層夾襖步出監(jiān)牢的瞬間故慈,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,390評(píng)論 1 271
  • 我被黑心中介騙來泰國打工框全, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留察绷,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 48,798評(píng)論 3 376
  • 正文 我出身青樓津辩,卻偏偏與公主長(zhǎng)得像拆撼,于是被迫代替她去往敵國和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子喘沿,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,435評(píng)論 2 359

推薦閱讀更多精彩內(nèi)容