英語で読む

次の方法で共有


DataGridViewComboBoxColumn クラス

定義

DataGridViewComboBoxCell オブジェクトの列を表します。

[System.Drawing.ToolboxBitmap(typeof(System.Windows.Forms.DataGridViewComboBoxColumn), "DataGridViewComboBoxColumn.bmp")]
public class DataGridViewComboBoxColumn : System.Windows.Forms.DataGridViewColumn
[System.Drawing.ToolboxBitmap(typeof(System.Windows.Forms.DataGridViewComboBoxColumn), "DataGridViewComboBoxColumn")]
public class DataGridViewComboBoxColumn : System.Windows.Forms.DataGridViewColumn
継承
属性

次のコード例では、 を使用 DataGridViewComboBoxColumn して列にデータを入力する方法を TitleOfCourtesy 示します。

using System;
using System.Data;
using System.Data.SqlClient;
using System.Windows.Forms;
using System.Collections.Generic;
using System.Drawing;

public class Employees : Form
{
    private DataGridView DataGridView1 = new DataGridView();
    private DataGridView DataGridView2 = new DataGridView();

    [STAThread]
    public static void Main()
    {
        try
        {
            Application.EnableVisualStyles();
            Application.Run(new Employees());
        }
        catch (Exception e)
        {
            MessageBox.Show(e.Message + e.StackTrace);
        }
    }

    public Employees()
    {
        this.Load += new EventHandler(Form1_Load);
    }

    private void Form1_Load(System.Object sender, System.EventArgs e)
    {
        try
        {
            SetUpForm();
            SetUpDataGridView1();
            SetUpDataGridView2();
        }
        catch (SqlException)
        {
            MessageBox.Show("The connection string <"
                + connectionString
                + "> failed to connect.  Modify it "
                + "to connect to a Northwind database accessible to "
                + "your system.",
                "ERROR", MessageBoxButtons.OK, MessageBoxIcon.Exclamation);
            Application.Exit();
        }
    }

    private void SetUpForm()
    {
        Size = new Size(800, 600);
        FlowLayoutPanel flowLayout = new FlowLayoutPanel();
        flowLayout.FlowDirection = FlowDirection.TopDown;
        flowLayout.Dock = DockStyle.Fill;
        Controls.Add(flowLayout);
        Text = "DataGridView columns demo";

        flowLayout.Controls.Add(DataGridView1);
        flowLayout.Controls.Add(DataGridView2);
    }

    private void SetUpDataGridView2()
    {
        DataGridView2.Dock = DockStyle.Bottom;
        DataGridView2.TopLeftHeaderCell.Value = "Sales Details";
        DataGridView2.RowHeadersWidthSizeMode = 
            DataGridViewRowHeadersWidthSizeMode.AutoSizeToAllHeaders;
    }

    private void SetUpDataGridView1()
    {
        DataGridView1.DataError += new 
            DataGridViewDataErrorEventHandler(DataGridView1_DataError);
        DataGridView1.CellContentClick += new 
            DataGridViewCellEventHandler(DataGridView1_CellContentClick);
        DataGridView1.CellValuePushed += new 
            DataGridViewCellValueEventHandler(DataGridView1_CellValuePushed);
        DataGridView1.CellValueNeeded += new 
            DataGridViewCellValueEventHandler(DataGridView1_CellValueNeeded);

        // Virtual mode is turned on so that the
        // unbound DataGridViewCheckBoxColumn will
        // keep its state when the bound columns are
        // sorted.       
        DataGridView1.VirtualMode = true;
        DataGridView1.AutoSize = true;
        DataGridView1.DataSource = Populate("SELECT * FROM Employees");
        DataGridView1.TopLeftHeaderCell.Value = "Employees";
        DataGridView1.RowHeadersWidthSizeMode = 
            DataGridViewRowHeadersWidthSizeMode.AutoSizeToAllHeaders;
        DataGridView1.ColumnHeadersHeightSizeMode = 
            DataGridViewColumnHeadersHeightSizeMode.AutoSize;
        DataGridView1.AutoSizeColumnsMode = 
            DataGridViewAutoSizeColumnsMode.AllCells;
        DataGridView1.AllowUserToAddRows = false;
        DataGridView1.AllowUserToDeleteRows = false;

        // The below autogenerated column is removed so 
        // a DataGridViewComboboxColumn could be used instead.
        DataGridView1.Columns.Remove(ColumnName.TitleOfCourtesy.ToString());
        DataGridView1.Columns.Remove(ColumnName.ReportsTo.ToString());

        AddLinkColumn();
        AddComboBoxColumns();
        AddButtonColumn();
        AddOutOfOfficeColumn();
    }

    private void AddComboBoxColumns()
    {
        DataGridViewComboBoxColumn comboboxColumn;
        comboboxColumn = CreateComboBoxColumn();
        SetAlternateChoicesUsingDataSource(comboboxColumn);
        comboboxColumn.HeaderText = "TitleOfCourtesy (via DataSource property)";
        DataGridView1.Columns.Insert(0, comboboxColumn);

        comboboxColumn = CreateComboBoxColumn();
        SetAlternateChoicesUsingItems(comboboxColumn);
        comboboxColumn.HeaderText = "TitleOfCourtesy (via Items property)";
        // Tack this example column onto the end.
        DataGridView1.Columns.Add(comboboxColumn);
    }

    private void AddLinkColumn()
    {
        DataGridViewLinkColumn links = new DataGridViewLinkColumn();

        links.UseColumnTextForLinkValue = true;
        links.HeaderText = ColumnName.ReportsTo.ToString();
        links.DataPropertyName = ColumnName.ReportsTo.ToString();
        links.ActiveLinkColor = Color.White;
        links.LinkBehavior = LinkBehavior.SystemDefault;
        links.LinkColor = Color.Blue;
        links.TrackVisitedState = true;
        links.VisitedLinkColor = Color.YellowGreen;

        DataGridView1.Columns.Add(links);
    }

    private static void SetAlternateChoicesUsingItems(
        DataGridViewComboBoxColumn comboboxColumn)
    {
        comboboxColumn.Items.AddRange("Mr.", "Ms.", "Mrs.", "Dr.");
    }

    private DataGridViewComboBoxColumn CreateComboBoxColumn()
    {
        DataGridViewComboBoxColumn column =
            new DataGridViewComboBoxColumn();
        {
            column.DataPropertyName = ColumnName.TitleOfCourtesy.ToString();
            column.HeaderText = ColumnName.TitleOfCourtesy.ToString();
            column.DropDownWidth = 160;
            column.Width = 90;
            column.MaxDropDownItems = 3;
            column.FlatStyle = FlatStyle.Flat;
        }
        return column;
    }

    private void SetAlternateChoicesUsingDataSource(DataGridViewComboBoxColumn comboboxColumn)
    {
        {
            comboboxColumn.DataSource = RetrieveAlternativeTitles();
            comboboxColumn.ValueMember = ColumnName.TitleOfCourtesy.ToString();
            comboboxColumn.DisplayMember = comboboxColumn.ValueMember;
        }
    }

    private DataTable RetrieveAlternativeTitles()
    {
        return Populate("SELECT distinct TitleOfCourtesy FROM Employees");
    }

    string connectionString =
        "Integrated Security=SSPI;Persist Security Info=False;" +
        "Initial Catalog=Northwind;Data Source=localhost";

    private DataTable Populate(string sqlCommand)
    {
        SqlConnection northwindConnection = new SqlConnection(connectionString);
        northwindConnection.Open();

        SqlCommand command = new SqlCommand(sqlCommand, northwindConnection);
        SqlDataAdapter adapter = new SqlDataAdapter();
        adapter.SelectCommand = command;

        DataTable table = new DataTable();
        table.Locale = System.Globalization.CultureInfo.InvariantCulture;
        adapter.Fill(table);

        return table;
    }

    // Using an enum provides some abstraction between column index
    // and column name along with compile time checking, and gives
    // a handy place to store the column names.
    enum ColumnName
    {
        EmployeeId,
        LastName,
        FirstName,
        Title,
        TitleOfCourtesy,
        BirthDate,
        HireDate,
        Address,
        City,
        Region,
        PostalCode,
        Country,
        HomePhone,
        Extension,
        Photo,
        Notes,
        ReportsTo,
        PhotoPath,
        OutOfOffice
    };

    private void AddButtonColumn()
    {
        DataGridViewButtonColumn buttons = new DataGridViewButtonColumn();
        {
            buttons.HeaderText = "Sales";
            buttons.Text = "Sales";
            buttons.UseColumnTextForButtonValue = true;
            buttons.AutoSizeMode =
                DataGridViewAutoSizeColumnMode.AllCells;
            buttons.FlatStyle = FlatStyle.Standard;
            buttons.CellTemplate.Style.BackColor = Color.Honeydew;
            buttons.DisplayIndex = 0;
        }

        DataGridView1.Columns.Add(buttons);
    }

    private void AddOutOfOfficeColumn()
    {
        DataGridViewCheckBoxColumn column = new DataGridViewCheckBoxColumn();
        {
            column.HeaderText = ColumnName.OutOfOffice.ToString();
            column.Name = ColumnName.OutOfOffice.ToString();
            column.AutoSizeMode = 
                DataGridViewAutoSizeColumnMode.DisplayedCells;
            column.FlatStyle = FlatStyle.Standard;
            column.ThreeState = true;
            column.CellTemplate = new DataGridViewCheckBoxCell();
            column.CellTemplate.Style.BackColor = Color.Beige;
        }

        DataGridView1.Columns.Insert(0, column);
    }

    private void PopulateSales(DataGridViewCellEventArgs buttonClick)
    {

        string employeeId = DataGridView1.Rows[buttonClick.RowIndex]
            .Cells[ColumnName.EmployeeId.ToString()].Value.ToString();
        DataGridView2.DataSource = Populate("SELECT * FROM Orders WHERE EmployeeId = " + employeeId);
    }

    #region "SQL Error handling"
    private void DataGridView1_DataError(object sender, DataGridViewDataErrorEventArgs anError)
    {

        MessageBox.Show("Error happened " + anError.Context.ToString());

        if (anError.Context == DataGridViewDataErrorContexts.Commit)
        {
            MessageBox.Show("Commit error");
        }
        if (anError.Context == DataGridViewDataErrorContexts.CurrentCellChange)
        {
            MessageBox.Show("Cell change");
        }
        if (anError.Context == DataGridViewDataErrorContexts.Parsing)
        {
            MessageBox.Show("parsing error");
        }
        if (anError.Context == DataGridViewDataErrorContexts.LeaveControl)
        {
            MessageBox.Show("leave control error");
        }

        if ((anError.Exception) is ConstraintException)
        {
            DataGridView view = (DataGridView)sender;
            view.Rows[anError.RowIndex].ErrorText = "an error";
            view.Rows[anError.RowIndex].Cells[anError.ColumnIndex].ErrorText = "an error";

            anError.ThrowException = false;
        }
    }
    #endregion

    private void DataGridView1_CellContentClick(object sender, DataGridViewCellEventArgs e)
    {

        if (IsANonHeaderLinkCell(e))
        {
            MoveToLinked(e);
        }
        else if (IsANonHeaderButtonCell(e))
        {
            PopulateSales(e);
        }
    }

    private void MoveToLinked(DataGridViewCellEventArgs e)
    {
        string employeeId;
        object value = DataGridView1.Rows[e.RowIndex].Cells[e.ColumnIndex].Value;
        if (value is DBNull) { return; }

        employeeId = value.ToString();
        DataGridViewCell boss = RetrieveSuperiorsLastNameCell(employeeId);
        if (boss != null)
        {
            DataGridView1.CurrentCell = boss;
        }
    }

    private bool IsANonHeaderLinkCell(DataGridViewCellEventArgs cellEvent)
    {
        if (DataGridView1.Columns[cellEvent.ColumnIndex] is
            DataGridViewLinkColumn &&
            cellEvent.RowIndex != -1)
        { return true; }
        else { return false; }
    }

    private bool IsANonHeaderButtonCell(DataGridViewCellEventArgs cellEvent)
    {
        if (DataGridView1.Columns[cellEvent.ColumnIndex] is
            DataGridViewButtonColumn &&
            cellEvent.RowIndex != -1)
        { return true; }
        else { return (false); }
    }

    private DataGridViewCell RetrieveSuperiorsLastNameCell(string employeeId)
    {

        foreach (DataGridViewRow row in DataGridView1.Rows)
        {
            if (row.IsNewRow) { return null; }
            if (row.Cells[ColumnName.EmployeeId.ToString()].Value.ToString().Equals(employeeId))
            {
                return row.Cells[ColumnName.LastName.ToString()];
            }
        }
        return null;
    }

    #region "checkbox state"
    Dictionary<string, bool> inOffice = new Dictionary<string, bool>();
    private void DataGridView1_CellValuePushed(object sender,
        DataGridViewCellValueEventArgs e)
    {
        if (IsCheckBoxColumn(e.ColumnIndex))
        {
            string employeeId = GetKey(e);
            if (!inOffice.ContainsKey(employeeId))
            {
                inOffice.Add(employeeId, (Boolean)e.Value);
            }
            else
            {
                inOffice[employeeId] = (Boolean)e.Value;
            }
        }
    }

    private string GetKey(DataGridViewCellValueEventArgs cell)
    {
        return DataGridView1.Rows[cell.RowIndex].
            Cells[ColumnName.EmployeeId.ToString()].Value.ToString();
    }

    private void DataGridView1_CellValueNeeded(object sender,
        DataGridViewCellValueEventArgs e)
    {

        if (IsCheckBoxColumn(e.ColumnIndex))
        {
            string employeeId = GetKey(e);
            if (!inOffice.ContainsKey(employeeId))
            {
                bool defaultValue = false;
                inOffice.Add(employeeId, defaultValue);
            }

            e.Value = inOffice[employeeId];
        }
    }

    private bool IsCheckBoxColumn(int columnIndex)
    {
        DataGridViewColumn outOfOfficeColumn =
            DataGridView1.Columns[ColumnName.OutOfOffice.ToString()];
        return (DataGridView1.Columns[columnIndex] == outOfOfficeColumn);
    }
    #endregion
}

注釈

クラスは DataGridViewComboBoxColumn 、ユーザーが選択肢の DataGridViewColumn 一覧から値を選択できるようにする、セルを論理的にホストするために使用される特殊化された型です。 DataGridViewComboBoxColumnには、交差するすべての DataGridViewRow に が関連付けられていますDataGridViewComboBoxCell

セルのプロパティを設定することで、セルを手動で設定 Value できます。 または、 プロパティで示されるデータ ソースに列を DataGridView.DataSource バインドすることもできます。 DataGridViewがデータベース テーブルにバインドされている場合は、column DataPropertyName プロパティをテーブル内の列の名前に設定します。 DataGridViewがオブジェクトのコレクションにバインドされている場合は、 プロパティをDataPropertyNameオブジェクト プロパティの名前に設定します。

コレクションに値を追加することで、列ドロップダウン リストを Items 手動で設定できます。 または、列 DataSource プロパティを設定して、ドロップダウン リストを独自のデータ ソースにバインドすることもできます。 値がコレクション内のオブジェクトまたはデータベース テーブル内のレコードである場合は、 プロパティと ValueMember プロパティも設定するDisplayMember必要があります。 プロパティは DisplayMember 、ドロップダウン リストに表示される値を提供するオブジェクト プロパティまたはデータベース列を示します。 プロパティは ValueMember 、セル Value プロパティの設定に使用されるオブジェクト プロパティまたはデータベース列を示します。

一般的なシナリオの 1 つは、コントロールを DataGridView 親データベース テーブルにバインドし、ドロップダウン リストを関連する子テーブルにバインドすることです。 たとえば、列をDataGridView含むテーブルにコントロールをOrdersバインドし、column DataSource プロパティを および 列を含ProductIDProductIDProductNameテーブルにProducts設定できます。 この場合、列 DataPropertyName プロパティを "ProductID" に設定して、列からセル値を Orders.ProductID 設定します。 ただし、セルとドロップダウン リストに実際の製品名を表示するには、 プロパティを "ProductID" に Products 、プロパティを "ProductName" に設定 ValueMember して、これらの値を DisplayMember テーブルにマップします。

ドロップダウン リストの値 (または プロパティによって ValueMember 示される値) には、実際のセル値を含める必要があります。または、コントロールが例外を DataGridView スローします。

DataSource、、 DisplayMemberおよび ValueMember プロパティを設定すると、 を含む列内のすべてのセルの対応するプロパティが自動的に CellTemplate設定されます。 特定のセルに対してこれらのプロパティ値をオーバーライドするには、最初に column プロパティを設定してから、セルのプロパティを設定します。

ComboBoxコントロールとは異なり、 DataGridViewComboBoxCell には および SelectedValue プロパティがありませんSelectedIndex。 代わりに、ドロップダウン リストから値を選択すると、セル Value プロパティが設定されます。

この列の種類の既定の並べ替えモードは です NotSortable

注意 (継承者)

から DataGridViewComboBoxColumn 派生し、派生クラスに新しいプロパティを追加するときは、 メソッドをオーバーライド Clone() して、複製操作中に新しいプロパティをコピーしてください。 基底クラスの Clone() プロパティが新しいセルにコピーされるように、基底クラスの メソッドも呼び出す必要があります。

コンストラクター

DataGridViewComboBoxColumn()

DataGridViewTextBoxColumn クラスの新しいインスタンスを既定の状態に初期化します。

プロパティ

AutoComplete

列内のセルで、セル内に入力される文字と、入力される可能性のある選択項目のうちの 1 つを一致させるかどうかを示す値を取得または設定します。

AutoSizeMode

列の幅を自動的に調整するときに使用するモードを取得または設定します。

(継承元 DataGridViewColumn)
CellTemplate

セルの作成に使用するテンプレートを取得または設定します。

CellType

セル テンプレートのランタイム型を取得します。

(継承元 DataGridViewColumn)
ContextMenuStrip

列のショートカット メニューを取得または設定します。

(継承元 DataGridViewColumn)
DataGridView

この要素に関連付けられている DataGridView コントロールを取得します。

(継承元 DataGridViewElement)
DataPropertyName

DataGridViewColumn がバインドされている、データ ソース プロパティの名前またはデータベースの列の名前を取得または設定します。

(継承元 DataGridViewColumn)
DataSource

コンボ ボックスの選択項目を決定するデータ ソースを取得または設定します。

DefaultCellStyle

列の既定のセル スタイルを取得または設定します。

(継承元 DataGridViewColumn)
DefaultHeaderCellType

既定のヘッダー セルのランタイム型を取得または設定します。

(継承元 DataGridViewBand)
Displayed

バンドが現在画面に表示されているかどうかを示す値を取得します。

(継承元 DataGridViewBand)
DisplayIndex

現在表示されている列を基準とした列の表示順序を設定または取得します。

(継承元 DataGridViewColumn)
DisplayMember

コンボ ボックスに表示する文字列の取得先となるプロパティまたは列を指定する文字列を取得または設定します。

DisplayStyle

編集時以外にコンボ ボックスを表示する方法を決定する値を取得または設定します。

DisplayStyleForCurrentCellOnly

この列に現在のセルが含まれる場合に、DisplayStyle プロパティの値を DataGridView コントロールの現在のセルにのみ適用するかどうかを示す値を取得または設定します。

DividerWidth

列の区分線の幅 (ピクセル数) を取得または設定します。

(継承元 DataGridViewColumn)
DropDownWidth

コンボ ボックスのドロップダウン リストの幅を取得または設定します。

FillWeight

列が、コントロール内の他の塗りつぶしモードの列の幅を基準とする塗りつぶしモードの場合、列の幅を表す値を取得または設定します。

(継承元 DataGridViewColumn)
FlatStyle

列に含まれるセルのフラット スタイルの外観を取得または設定します。

Frozen

ユーザーが DataGridView コントロールを水平方向にスクロールしたときに列が移動するかどうかを示す値を取得または設定します。

(継承元 DataGridViewColumn)
HasDefaultCellStyle

DefaultCellStyle プロパティが設定されているかどうかを示す値を取得します。

(継承元 DataGridViewBand)
HeaderCell

列ヘッダーを表す DataGridViewColumnHeaderCell を取得または設定します。

(継承元 DataGridViewColumn)
HeaderCellCore

DataGridViewBand のヘッダー セルを取得または設定します。

(継承元 DataGridViewBand)
HeaderText

列のヘッダー セルのキャプション テキストを取得または設定します。

(継承元 DataGridViewColumn)
Index

DataGridView コントロール内のバンドの相対位置を取得します。

(継承元 DataGridViewBand)
InheritedAutoSizeMode

列に対して有効なサイズ変更モードを取得します。

(継承元 DataGridViewColumn)
InheritedStyle

列に現在適用されているセル スタイルを取得します。

(継承元 DataGridViewColumn)
IsDataBound

列がデータ ソースにバインドされているかどうかを示す値を取得します。

(継承元 DataGridViewColumn)
IsRow

バンドが行を表すかどうかを示す値を取得します。

(継承元 DataGridViewBand)
Items

コンボ ボックスの選択項目として使用されるオブジェクトのコレクションを取得します。

MaxDropDownItems

列内のセルのドロップダウン リストに表示する項目の最大数を取得または設定します。

MinimumWidth

列の最小幅をピクセル単位で取得または設定します。

(継承元 DataGridViewColumn)
Name

列の名前を取得または設定します。

(継承元 DataGridViewColumn)
ReadOnly

ユーザーが列のセルを編集できるかどうかを示す値を取得または設定します。

(継承元 DataGridViewColumn)
Resizable

列のサイズを変更できるかどうかを示す値を取得または設定します。

(継承元 DataGridViewColumn)
Selected

バンドが、選択されたユーザー インターフェイス (UI) 状態かどうかを示す値を取得または設定します。

(継承元 DataGridViewBand)
Site

列のサイトを取得または設定します。

(継承元 DataGridViewColumn)
Sorted

コンボ ボックス内の項目が並べ替えられたかどうかを示す値を取得または設定します。

SortMode

列の並べ替えモードを取得または設定します。

(継承元 DataGridViewColumn)
State

要素のユーザー インターフェイス (UI) の状態を取得します。

(継承元 DataGridViewElement)
Tag

バンドに関連付けられているデータを含むオブジェクトを取得または設定します。

(継承元 DataGridViewBand)
ToolTipText

ツールヒントに使用されるテキストを取得または設定します。

(継承元 DataGridViewColumn)
ValueMember

ドロップダウン リストの選択項目に対応する値の取得先となる、プロパティまたは列を指定する文字列を取得または設定します。

ValueType

列のセルの値のデータ型を取得または設定します。

(継承元 DataGridViewColumn)
Visible

列が表示されているかどうかを示す値を取得または設定します。

(継承元 DataGridViewColumn)
Width

列の現在の幅を取得または設定します。

(継承元 DataGridViewColumn)

メソッド

Clone()

対象の列の同一コピーを作成します。

Dispose()

DataGridViewBand によって使用されているすべてのリソースを解放します。

(継承元 DataGridViewBand)
Dispose(Boolean)

DataGridViewBand によって使用されているアンマネージド リソースを解放し、オプションでマネージド リソースも解放します。

(継承元 DataGridViewColumn)
Equals(Object)

指定されたオブジェクトが現在のオブジェクトと等しいかどうかを判断します。

(継承元 Object)
GetHashCode()

既定のハッシュ関数として機能します。

(継承元 Object)
GetPreferredWidth(DataGridViewAutoSizeColumnMode, Boolean)

指定した基準に基づいて、列の適切な幅を計算します。

(継承元 DataGridViewColumn)
GetType()

現在のインスタンスの Type を取得します。

(継承元 Object)
MemberwiseClone()

現在の Object の簡易コピーを作成します。

(継承元 Object)
OnDataGridViewChanged()

バンドが別の DataGridView に関連付けられている場合に呼び出されます。

(継承元 DataGridViewBand)
RaiseCellClick(DataGridViewCellEventArgs)

CellClick イベントを発生させます。

(継承元 DataGridViewElement)
RaiseCellContentClick(DataGridViewCellEventArgs)

CellContentClick イベントを発生させます。

(継承元 DataGridViewElement)
RaiseCellContentDoubleClick(DataGridViewCellEventArgs)

CellContentDoubleClick イベントを発生させます。

(継承元 DataGridViewElement)
RaiseCellValueChanged(DataGridViewCellEventArgs)

CellValueChanged イベントを発生させます。

(継承元 DataGridViewElement)
RaiseDataError(DataGridViewDataErrorEventArgs)

DataError イベントを発生させます。

(継承元 DataGridViewElement)
RaiseMouseWheel(MouseEventArgs)

MouseWheel イベントを発生させます。

(継承元 DataGridViewElement)
ToString()

列を説明する文字列を取得します。

イベント

Disposed

DataGridViewColumn が破棄されたときに発生します。

(継承元 DataGridViewColumn)

適用対象

製品 バージョン
.NET Framework 2.0, 3.0, 3.5, 4.0, 4.5, 4.5.1, 4.5.2, 4.6, 4.6.1, 4.6.2, 4.7, 4.7.1, 4.7.2, 4.8, 4.8.1
Windows Desktop 3.0, 3.1, 5, 6, 7, 8, 9, 10

こちらもご覧ください