バージョン

Outlook2007ColorScheme クラス

'Office2007’ UltraCalendarLook.ViewStyle が有効な時に UltraDayViewUltraWeekViewUltraMonthViewSingle、および UltraMonthViewMulti コントロールのビジュアル要素によって使用される色プロパティを公開するクラス。
シンタックス
'宣言
 
Public NotInheritable Class Outlook2007ColorScheme 
public sealed class Outlook2007ColorScheme 
解説

UltraCalendarLook.Outlook2007ColorSchemes コレクションには、Microsoft Outlook 2007 の [カレンダー オプション] ダイアログに表示されるカラー スキームごとにひとつずつ、Outlook2007ColorScheme クラスの 15 のインスタンスが含まれます。

Outlook2007ColorScheme クラスの "Standalone" インスタンスを作成し、OwnerOwner.Outlook2007ColorScheme プロパティに割り当てることができます。パブリックに公開されるコンストラクターは、単一のタイプ System.Drawing.Color の 1 つのパラメーターを使用します。このパラメーターは BaseColor プロパティの値を決定します。これはこのクラスによって公開されるすべてのその他の色プロパティの派生元の色です。

Outlook2007ColorScheme クラスによって公開される色プロパティは、BaseColor の明るさ (つまり明度) を増減することによって作成されます。このため、カラー スキームの基本色を選択する場合には、この明度コンポーネントが相対的に小さいまたは相対的に大きい色は回避すべきです。このクラスのプロパティによってその後返される色の多くは暗すぎる、または白に近すぎてエンドユーザーが見て美しくないからです。

使用例
Imports Infragistics.Win
Imports Infragistics.Win.UltraWinSchedule
Imports Infragistics.Win.UltraWinEditors
Imports System.Drawing.Drawing2D

' <summary>
' UltraComboEditor-derived class which emulates a color-picker
' for the purpose of providing the end user with a way to select
' Outlook2007ColorScheme instances.
' </summary>
Public Class Outlook2007ColorSchemeDropDown
    Inherits UltraComboEditor


    Private Shared ReadOnly defaultItemHeight As Integer = 18
    Private _calendarLook As UltraCalendarLook = Nothing

    Public Sub New(ByVal parent As Control, ByVal calendarLook As UltraCalendarLook)

        MyBase.New()

        If parent Is Nothing Then Throw New ArgumentNullException()
        If calendarLook Is Nothing Then Throw New ArgumentNullException()

        Me._calendarLook = calendarLook

        '	Set the DropDownStyle to DropDownList so the end user
        '	can only select items from the list.
        Me.DropDownStyle = DropDownStyle.DropDownList

        '	Set some of the properties of the ValueList
        '	so that we only display an image of the color
        Dim ValueList As ValueList = Me.Items.ValueList
        ValueList.DisplayStyle = ValueListDisplayStyle.Picture
        ValueList.ItemHeight = Outlook2007ColorSchemeDropDown.defaultItemHeight
        ValueList.ScaleItemImage = ScaleImage.Never

        '	Populate the list
        Me.PopulateList()

        '   Add the control to the parent Controls collection
        parent.Controls.Add(Me)
    End Sub


    ' <summary>
    ' Gets/sets the UltraCalendarLook component associated with this Outlook2007ColorSchemeDropDown instance.
    ' </summary>
    Public Property CalendarLook() As UltraCalendarLook
        Get
            Return Me._calendarLook
        End Get
        Set(ByVal Value As UltraCalendarLook)
            If Not Value Is Me._calendarLook Then
                Me._calendarLook = Value
                Me.PopulateList()
            End If
        End Set
    End Property

    Public Property SelectedColorScheme() As Outlook2007ColorScheme
        Get
            Dim selectedItem As ValueListItem = Me.SelectedItem
            Return IIf(Not selectedItem Is Nothing, selectedItem.DataValue, Nothing)
        End Get

        Set(ByVal Value As Outlook2007ColorScheme)
            Dim selectedIndex As Integer = -1

            If Value Is Nothing Then
                selectedIndex = -1
            Else

                Dim items As ValueListItemsCollection = Me.Items
                Dim i As Integer
                For i = 0 To items.Count - 1

                    Dim item As ValueListItem = items(i)
                    Dim colorScheme As Outlook2007ColorScheme = item.DataValue

                    If (Value Is colorScheme) Then
                        selectedIndex = i
                        Exit For
                    End If
                Next

                Me.SelectedIndex = selectedIndex
            End If

        End Set
    End Property


    Private Sub PopulateList()
        '	Clear the Items collection
        Dim items As ValueListItemsCollection = Me.Items
        items.Clear()

        If (Me.CalendarLook Is Nothing) Then Return

        '	Get the width and height to use for the images we are going to generate
        Dim width As Integer = Me.Width - 2
        Dim height As Integer = Outlook2007ColorSchemeDropDown.defaultItemHeight

        '	Iterate the members of the CalendarLook's Outlook2007ColorSchemes
        '	collection...add an item to the Items collection for each color scheme
        Dim colorSchemes As Outlook2007ColorSchemeCollection = Me.CalendarLook.Outlook2007ColorSchemes

        Dim i As Integer
        For i = 0 To colorSchemes.Count - 1

            '	Use the SupportedColors array to index into the
            '	Outlook2007ColorSchemes collection
            Dim colorScheme As Outlook2007ColorScheme = colorSchemes(colorSchemes.SupportedColors(i))

            '	Add a ValueListItem, and assign the color scheme to its DataValue property.
            Dim item As ValueListItem = items.Add(colorScheme)

            '	Get the colors we will use to represent this color scheme
            Dim backColor As Color = colorScheme.AppointmentBackColor2
            Dim backColor2 As Color = colorScheme.BaseColor
            Dim borderColor As Color = colorScheme.AppointmentBorderColor

            '	Create a Bitmap and get a Graphics object for it
            Dim bitmap As Bitmap = New Bitmap(width, height)
            Dim gr As Graphics = Graphics.FromImage(bitmap)

            '	Create the Rectangle for the fill colors
            Dim rect As Rectangle = New Rectangle(Point.Empty, bitmap.Size)
            rect.Inflate(-1, -1)

            '	Create a LinearGradientBrush with the fill colors,
            '	and a Pen for the border color.
            Dim brush As New LinearGradientBrush(rect, backColor, backColor2, 90.0F)
            Dim pen As New Pen(borderColor)

            '	Fill the Rectangle with the gradient colors
            gr.FillRectangle(brush, rect)

            '	Reduce the width and height of the Rectangle and draw the border
            rect.Width -= 1
            rect.Height -= 1
            gr.DrawRectangle(pen, rect)

            '	Dispose of the GDI+ objects we created to render the image
            brush.Dispose()
            pen.Dispose()
            gr.Dispose()

            '	Assign the resulting Bitmap to the ValueListItem's Appearance.Image.
            item.Appearance.Image = bitmap

        Next

        If (items.Count > 0) Then
            '	Since this is a relatively short list, set the MaxDropDownItems
            '	property to the number of items in the collection so that no
            '	scrollbar is shown.
            Me.MaxDropDownItems = items.Count

            '	Select the item which corresponds to the default color scheme
            Me.SelectedColorScheme = colorSchemes.DefaultScheme
        End If

    End Sub

End Class
using Infragistics.Win;
using Infragistics.Win.UltraWinSchedule;
using System.Diagnostics;

	/// <summary>
	/// UltraComboEditor-derived class which emulates a color-picker
	/// for the purpose of providing the end user with a way to select
	/// Outlook2007ColorScheme instances.
	/// </summary>
	public class Outlook2007ColorSchemeDropDown : UltraComboEditor
	{
		static private readonly int defaultItemHeight = 18;
		private UltraCalendarLook calendarLook = null;

		/// <summary>
		/// Creates a new instance of the Outlook2007ColorSchemeDropDown class.
		/// </summary>
		/// <param name="parent">The parent control</param>
		/// <param name="calendarLook">The UltraCalendarLook associated with the dropdown.</param>
		public Outlook2007ColorSchemeDropDown( Control parent, UltraCalendarLook calendarLook )
		{
			if ( parent == null )
				throw new ArgumentNullException( "parent" );

			if ( calendarLook == null )
				throw new ArgumentNullException( "calendarLook" );

			this.calendarLook = calendarLook;

			//	Set the DropDownStyle to DropDownList so the end user
			//	can only select items from the list.
			this.DropDownStyle = DropDownStyle.DropDownList;

			//	Set some of the properties of the ValueList
			//	so that we only display an image of the color
			ValueList valueList = this.Items.ValueList;
			valueList.DisplayStyle = ValueListDisplayStyle.Picture;
			valueList.ItemHeight = Outlook2007ColorSchemeDropDown.defaultItemHeight;
			valueList.ScaleItemImage = ScaleImage.Never;

			//	Populate the list
			this.PopulateList();

			//	Add the control to the parent Controls collection
			parent.Controls.Add( this );
		}

		/// <summary>
		/// Gets/sets the UltraCalendarLook component associated with this Outlook2007ColorSchemeDropDown instance.
		/// </summary>
		public UltraCalendarLook CalendarLook
		{
			get{ return this.calendarLook; }
			set
			{ 
				if ( value != this.calendarLook )
				{
					this.calendarLook = value;
					this.PopulateList();
				}
			}
		}

		/// <summary>
		/// Gets/sets the currently selected Outlook2007ColorScheme.
		/// </summary>
		public Outlook2007ColorScheme SelectedColorScheme
		{
			get
			{ 
				ValueListItem selectedItem = this.SelectedItem;
				return selectedItem != null ? selectedItem.DataValue as Outlook2007ColorScheme : null;
			}

			set
			{
				int selectedIndex = -1;

				if ( value == null )
					selectedIndex = -1;
				else
				{
					ValueListItemsCollection items = this.Items;
					for ( int i = 0; i < items.Count; i ++ )
					{
						ValueListItem item = items[i];
						Outlook2007ColorScheme colorScheme = item.DataValue as Outlook2007ColorScheme;
						
						if ( value == colorScheme )
						{
							selectedIndex = i;
							break;
						}
					}

					this.SelectedIndex = selectedIndex;
				}
			}
		}


		private void PopulateList()
		{
			//	Clear the Items collection
			ValueListItemsCollection items = this.Items;
			items.Clear();

			if ( this.CalendarLook == null )
				return;

			//	Get the width and height to use for the images we are going to generate
			int width = this.Width - 2;
			int height = Outlook2007ColorSchemeDropDown.defaultItemHeight;

			//	Iterate the members of the CalendarLook's Outlook2007ColorSchemes
			//	collection...add an item to the Items collection for each color scheme
			Outlook2007ColorSchemeCollection colorSchemes = this.CalendarLook.Outlook2007ColorSchemes;

			for ( int i = 0; i < colorSchemes.Count; i ++ )
			{
				//	Use the SupportedColors array to index into the
				//	Outlook2007ColorSchemes collection
				Outlook2007ColorScheme colorScheme = colorSchemes[ colorSchemes.SupportedColors[i] ];

				//	Add a ValueListItem, and assign the color scheme to its DataValue property.
				ValueListItem item = items.Add( colorScheme );

				//	Get the colors we will use to represent this color scheme
				Color backColor = colorScheme.AppointmentBackColor2;
				Color backColor2 = colorScheme.BaseColor;
				Color borderColor = colorScheme.AppointmentBorderColor;

				//	Create a Bitmap and get a Graphics object for it
				Bitmap bitmap = new Bitmap( width, height );
				Graphics gr = Graphics.FromImage( bitmap );

				//	Create the Rectangle for the fill colors
				Rectangle rect = new Rectangle( Point.Empty, bitmap.Size );
				rect.Inflate( -1, -1 );

				//	Create a LinearGradientBrush with the fill colors,
				//	and a Pen for the border color.
				LinearGradientBrush brush = new LinearGradientBrush( rect, backColor, backColor2, 90f );
				Pen pen = new Pen( borderColor );

				//	Fill the Rectangle with the gradient colors
				gr.FillRectangle( brush, rect );

				//	Reduce the width and height of the Rectangle and draw the border
				rect.Width -= 1;
				rect.Height -= 1;
				gr.DrawRectangle( pen, rect );

				//	Dispose of the GDI+ objects we created to render the image
				brush.Dispose();
				pen.Dispose();
				gr.Dispose();

				//	Assign the resulting Bitmap to the ValueListItem's Appearance.Image.
				item.Appearance.Image = bitmap;
			}

			if ( items.Count > 0 )
			{
				//	Since this is a relatively short list, set the MaxDropDownItems
				//	property to the number of items in the collection so that no
				//	scrollbar is shown.
				this.MaxDropDownItems = items.Count;

				//	Select the item which corresponds to the default color scheme
				this.SelectedColorScheme = colorSchemes.DefaultScheme;
			}
		}
	}
参照