日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

如何将第三方控件嵌入ToolStrip控件,并提供Design-Time支持

發(fā)布時間:2025/3/15 编程问答 27 豆豆
生活随笔 收集整理的這篇文章主要介紹了 如何将第三方控件嵌入ToolStrip控件,并提供Design-Time支持 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

最近研究了一下如何將第三方控件嵌入到ToolStrip控件中,并能提供Design-Time下的支持.

下面將詳細(xì)講解如何把系統(tǒng)的MonthCalendar控件嵌入到ToolStrip控件中.

以下的兩幅圖片顯示了最終的樣子.

Run-Time下的樣子

Design-Time下的樣子

如何將第三方控件嵌入到ToolStrip(http://www.freeeim.com/bbs/)

微軟實現(xiàn)了一個ToolStripControlHost類, 它是ToolStripComboBox, ToolStripTextBox, 和 ToolStripProgressBar等的基類. ToolStripControlHost提供了將第三方控件嵌入ToolStrip的能力. 我們可以用兩種方式使用它:

一, 我們可以直接將繼承自Control類的第三方控件作為ToolStripControlHost的構(gòu)造函數(shù)的參數(shù)構(gòu)造一個ToolStripControlHost實例, 將這個實例直接作為ToolStrip的Item加到ToolStrip的Items集合中使用即可.FreeEIM 每日健康多一點!
view sourceprint?1 private void Form2_Load(object sender, EventArgs e)?

2 {?

3???? MonthCalendar monthCalendar = new MonthCalendar();?

4???? monthCalendar.FirstDayOfWeek = Day.Monday;?

5???? this.toolStrip1.Items.Add(new ToolStripControlHost(monthCalendar));?

6 }

?

二, 從ToolStripControlHost派生, 在繼承類默認(rèn)參構(gòu)造函數(shù)中將第三方控件作為參數(shù)調(diào)用基類的有參構(gòu)造函數(shù). 這種方式可以很容易的在繼承類中暴露屬性,方法和事件,便于訪問.
實現(xiàn)步驟如下:

1, 擴(kuò)展 ToolStripControlHost。實現(xiàn)一個調(diào)用傳入所需控件的基類構(gòu)造函數(shù)的默認(rèn)構(gòu)造函數(shù)。
?

view sourceprint?1 public ToolStripMonthCalendar() : base(new MonthCalendar())?

2 {?

3???

4 }

?

2, 聲明一個與包裝控件相同類型的屬性,并在屬性訪問器中返回 Control 作為正確類型的控件。
?

?

view sourceprint?1 public MonthCalendar MonthCalendarControl?

2 {?

3???? get

4???? {?

5???????? return base.Control as MonthCalendar;?

6???? }?

7 }

?

3, 使用擴(kuò)展類中的屬性和方法公開包裝控件的其他常用屬性和方法。
view sourceprint?01 // Expose the MonthCalendar.FirstDayOfWeek as a property.?

02 public Day FirstDayOfWeek?

03 {?

04???? get

05???? {?

06????????? return this.MonthCalendarControl.FirstDayOfWeek;?

07???? }?

08???? set

09???? {?

10???????? value = this.MonthCalendarControl.FirstDayOfWeek;?

11???? }?

12 }?

13????

14???

15 // Expose the AddBoldedDate method.?

16 public void AddBoldedDate(DateTime dateToBold)?

17 {?

18????? this.MonthCalendarControl.AddBoldedDate(dateToBold);?

19 }

?

4, 也可以選擇重寫 OnSubscribeControlEvents 和 OnUnsubscribeControlEvents 方法,并添加要公開的控件事件。
view sourceprint?01 // Subscribe and unsubscribe the control events you wish to expose.?

02 protected override void OnSubscribeControlEvents(Control c)?

03 {?

04???? // Call the base so the base events are connected.?

05???? base.OnSubscribeControlEvents(c);?

06???

07???? // Cast the control to a MonthCalendar control.?

08???? MonthCalendar monthCalendarControl = (MonthCalendar)c;?

09???

10???? // Add the event.?

11???? monthCalendarControl.DateChanged += new DateRangeEventHandler(OnDateChanged);?

12 }?

13???

14 protected override void OnUnsubscribeControlEvents(Control c)?

15 {?

16???? // Call the base method so the basic events are unsubscribed.?

17???? base.OnUnsubscribeControlEvents(c);?

18????

19???

20???? // Cast the control to a MonthCalendar control.?

21???? MonthCalendar monthCalendarControl = (MonthCalendar)c;?

22???

23???

24???? // Remove the event.?

25???? monthCalendarControl.DateChanged -= new DateRangeEventHandler(OnDateChanged);?

26 }

?

5, 為要公開的事件提供必要的包裝。
view sourceprint?01 // Declare the DateChanged event.?

02???

03 public event DateRangeEventHandler DateChanged;?

04???????????

05???

06 // Raise the DateChanged event.?

07???

08? private void OnDateChanged(object sender, DateRangeEventArgs e)?

09 {?

10???? if (DateChanged != null)?

11???? {?

12???????? DateChanged(this, e);?

13???? }?

14 }

?

完整的示例請參見MSDN(http://freeeim.blog.sohu.com/).

?

如何提供設(shè)計時的支持
?

1, 為從ToolStripControlHost繼承的類添加ToolStripItemDesignerAvailabilityAttribute標(biāo)簽.
?

它可以使ToolStrip在Design-Time下能夠找到從ToolStripControlHost繼承的第三方控件, 直接效果就是第三方控件在下拉菜單中可以直接列舉出來. 另外,除了可以將第三方控件嵌入ToolStrip外, 我們還可以直接將第三方控件嵌入到ContextMenuStrip, MenuStrip和StatusStrip中.

ToolStripItemDesignerAvailability枚舉成員如下:

成員名稱
?說明
?
All
?指定所有控件均可見。
ContextMenuStrip
?指定 ContextMenuStrip 是可見的。
MenuStrip
?指定 MenuStrip 是可見的。
?
None
?指定無任何控件可見。
StatusStrip
?指定 StatusStrip 是可見的。
ToolStrip
?指定 ToolStrip 是可見的。

?

2, 為繼承的控件添加ToolboxBitmapAttribute標(biāo)簽改變默認(rèn)Icon.
?

view sourceprint?01 [ToolboxBitmap(typeof(MonthCalendar))]?

02 [DefaultProperty("Value")]??

03 [ToolStripItemDesignerAvailability(?

04???? ToolStripItemDesignerAvailability.ContextMenuStrip |?

05???? ToolStripItemDesignerAvailability.MenuStrip |?

06???? ToolStripItemDesignerAvailability.StatusStrip |?

07???? ToolStripItemDesignerAvailability.ToolStrip)]?

08 public class ToolStripMonthCalendar : ToolStripControlHost?

09 {?

10??????? //TODO: ......?

11 }

?

The End

總結(jié)

以上是生活随笔為你收集整理的如何将第三方控件嵌入ToolStrip控件,并提供Design-Time支持的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。