AccessibleObject クラス
障害を持つユーザーに合わせてアプリケーションの UI を調整するために、ユーザー補助アプリケーションが使用する情報を提供します。
この型のすべてのメンバの一覧については、AccessibleObject メンバ を参照してください。
System.Object
System.MarshalByRefObject
System.Windows.Forms.AccessibleObject
System.Windows.Forms.Control.ControlAccessibleObject
System.Windows.Forms.Design.ControlDesigner.ControlDesignerAccessibleObject
<ComVisible(True)>
Public Class AccessibleObject Inherits MarshalByRefObject Implements IReflect, IAccessible
[C#]
[ComVisible(true)]
public class AccessibleObject : MarshalByRefObject, IReflect, IAccessible
[C++]
[ComVisible(true)]
public __gc class AccessibleObject : public MarshalByRefObject, IReflect, IAccessible
[JScript]
public
ComVisible(true)
class AccessibleObject extends MarshalByRefObject implements IReflect, IAccessible
スレッドセーフ
この型の public static (Visual Basicでは Shared) のすべてのメンバは、マルチスレッド操作で安全に使用できます。インスタンスのメンバの場合は、スレッドセーフであるとは限りません。
解説
ユーザー補助アプリケーションでは、アプリケーションの機能を調整することによって、障害を持つユーザーの利便を高めることができます。
視覚障害のあるユーザーに対しては、ソフトウェアおよびオペレーティング システムの機能を必要に合わせて調整できます。たとえば、テキストやイメージを拡大したり、コントラストを強調して表示したりできます。また、色盲のユーザーには、適切な配色を使用できます。重度の視覚障害があるユーザーに対しては、コンピュータから、画面表示を支援する装置にアクセスできる機能を提供します。これによって、画面上のテキストを、音声または動的に表示が変更する点字ディスプレイに変換できます。
聴覚に障害のあるユーザーに対しては、点滅ツール バーなど、視覚効果のある UI をプログラムに取り入れたり、音声メッセージをテキストとして表示したりできます。たとえば、コントロール パネルのユーザー補助オプションである SoundSentry 機能を有効にすると、警告音を画面表示に反映できます。
身体的な障害のあるユーザーに対しては、キーボードおよびマウス操作を簡単にしたり不要にしたりするようにコントロールを設計することによって、コンピュータを使いやすくすることができます。コントロール パネルには支援機能が用意されています。たとえば、マウス ポインタの操作に、マウスの代わりにテンキーを使用できます。Ctrl キーを押しながら P キーを押すなど、2 つ以上のキーを同時に押すことができない場合は、 StickyKeys オプションを使用すると、キーを 1 つずつ押すことによって同じ操作ができるようになります。
知覚障害や言語障害のあるユーザーに対しては、ソフトウェア プログラムの設計によって利便性を向上できます。たとえば、常に次の操作がわかるように工夫する、表示を簡略化する、文章を少なくする、小学生でも理解できる文章にするなどの対応が有効です。
発作性の障害のあるユーザーに対しては、発作の原因となるようなパターンを削除したソフトウェア プログラムを設計できます。
ユーザー補助アプリケーションの詳細など、ユーザー補助の概要については、MSDN ライブラリまたは Microsoft の Web サイトで Microsoft Accessibility に関するドキュメントを参照してください。
継承時の注意: このクラスから継承する場合は、すべてのメンバをオーバーライドできます。
メモ AccessibleObject を使用するには、.NET Framework と一緒にインストールされる Accessibility アセンブリへの参照を追加する必要があります。
使用例
[Visual Basic, C#, C++] ユーザー補助情報を公開する AccessibleObject クラスおよび Control.ControlAccessibleObject クラスを使用して、ユーザー補助対応のチャート コントロールを作成する方法の例を次に示します。コントロールは、凡例に沿って 2 つの曲線をプロットします。 ControlAccessibleObject から派生された ChartControlAccessibleObject
クラスは、チャート コントロールの独自のユーザー補助情報を提供することを目的として、 CreateAccessibilityInstance メソッドで使用します。チャートの凡例は実際の Control ベースのコントロールではなく、チャート コントロールによって描画されるため、組み込みのユーザー補助情報は含まれていません。このため、 ChartControlAccessibleObject
クラスは、 GetChild メソッドをオーバーライドして、凡例の各部分のユーザー補助情報を表す CurveLegendAccessibleObject
を返します。ユーザー補助対応のアプリケーションでこのコントロールが使用された場合、このコントロールは必要なユーザー補助情報を提供できます。
Option Explicit
Imports System
Imports System.Drawing
Imports System.Windows.Forms
Namespace ChartControlNameSpace
Public Class Form1
Inherits System.Windows.Forms.Form
' Test out the Chart Control.
Private chart1 As ChartControl
<System.STAThread()> _
Public Shared Sub Main()
System.Windows.Forms.Application.Run(New Form1())
End Sub 'Main
Public Sub New()
' Create a chart control and add it to the form.
Me.chart1 = New ChartControl()
Me.ClientSize = New System.Drawing.Size(920, 566)
Me.chart1.Location = New System.Drawing.Point(47, 16)
Me.chart1.Size = New System.Drawing.Size(600, 400)
Me.Controls.Add(Me.chart1)
End Sub
End Class
' Declares a chart control that demonstrates Accessibility in Windows Forms.
Public Class ChartControl
Inherits System.Windows.Forms.UserControl
Private legend1 As CurveLegend
Private legend2 As CurveLegend
Public Sub New()
' The ChartControl draws the chart in the OnPaint override.
SetStyle(ControlStyles.ResizeRedraw, True)
SetStyle(ControlStyles.DoubleBuffer, True)
SetStyle(ControlStyles.AllPaintingInWmPaint, True)
Me.BackColor = System.Drawing.Color.White
Me.Name = "ChartControl"
' The CurveLengend is not Control-based, it just
' represent the parts of the legend.
legend1 = New CurveLegend(Me, "A")
legend1.Location = New Point(20, 30)
legend2 = New CurveLegend(Me, "B")
legend2.Location = New Point(20, 50)
End Sub 'New
' Overridden to return the custom AccessibleObject
' for the entire chart.
Protected Overrides Function CreateAccessibilityInstance() As AccessibleObject
Return New ChartControlAccessibleObject(Me)
End Function
Protected Overrides Sub OnPaint(e As PaintEventArgs)
' The ChartControl draws the chart in the OnPaint override.
MyBase.OnPaint(e)
Dim bounds As Rectangle = Me.ClientRectangle
Dim border As Integer = 5
' Draw the legends first.
Dim format As New StringFormat()
format.Alignment = StringAlignment.Center
format.LineAlignment = StringAlignment.Center
If Not (legend1 Is Nothing) Then
If legend1.Selected Then
e.Graphics.FillRectangle(New SolidBrush(Color.Blue), legend1.Bounds)
Else
e.Graphics.DrawRectangle(Pens.Blue, legend1.Bounds)
End If
e.Graphics.DrawString(legend1.Name, Me.Font, Brushes.Black, RectangleF.op_Implicit(legend1.Bounds), format)
End If
If Not (legend2 Is Nothing) Then
If legend2.Selected Then
e.Graphics.FillRectangle(New SolidBrush(Color.Red), legend2.Bounds)
Else
e.Graphics.DrawRectangle(Pens.Red, legend2.Bounds)
End If
e.Graphics.DrawString(legend2.Name, Me.Font, Brushes.Black, RectangleF.op_Implicit(legend2.Bounds), format)
End If
' Chart out the actual curves that represent data in the Chart.
bounds.Inflate(-border, -border)
Dim curve1() As Point = {New Point(bounds.Left, bounds.Bottom), _
New Point(bounds.Left + bounds.Width / 3, bounds.Top + bounds.Height / 5), _
New Point(bounds.Right - bounds.Width / 3,(bounds.Top + bounds.Bottom) / 2), _
New Point(bounds.Right, bounds.Top)}
Dim curve2() As Point = {New Point(bounds.Left, bounds.Bottom - bounds.Height / 3), _
New Point(bounds.Left + bounds.Width / 3, bounds.Top + bounds.Height / 5), _
New Point(bounds.Right - bounds.Width / 3,(bounds.Top + bounds.Bottom) / 2), _
New Point(bounds.Right, bounds.Top + bounds.Height / 2)}
' Draw the actual curve only if it is selected.
If legend1.Selected Then
e.Graphics.DrawCurve(Pens.Blue, curve1)
End If
If legend2.Selected Then
e.Graphics.DrawCurve(Pens.Red, curve2)
End If
e.Graphics.DrawRectangle(Pens.Blue, bounds)
End Sub 'OnPaint
' Handle the QueryAccessibilityHelp event.
Private Sub ChartControl_QueryAccessibilityHelp(sender As Object, _
e As System.Windows.Forms.QueryAccessibilityHelpEventArgs) Handles MyBase.QueryAccessibilityHelp
e.HelpString = "Displays chart data"
End Sub
' Handle the Click event for the chart.
' Toggle the selection of whatever legend was clicked.
Private Sub ChartControl_Click(sender As Object, e As System.EventArgs) Handles MyBase.Click
Dim pt As Point = Me.PointToClient(Control.MousePosition)
If legend1.Bounds.Contains(pt) Then
legend1.Selected = Not legend1.Selected
Else
If legend2.Bounds.Contains(pt) Then
legend2.Selected = Not legend2.Selected
End If
End If
End Sub 'ChartControl_Click
' Get an array of the CurveLengends used in the Chart.
Public ReadOnly Property Legends() As CurveLegend()
Get
Return New CurveLegend() {legend1, legend2}
End Get
End Property
Protected Sub ExposeAccessibilityNotifyClients(ByVal accEvent As AccessibleEvents, ByVal childID As Integer)
AccessibilityNotifyClients(accEvent, childID)
End Sub
' Inner Class ChartControlAccessibleObject represents accessible information
' associated with the ChartControl.
' The ChartControlAccessibleObject is returned in the ' ChartControl.CreateAccessibilityInstance override.
Public Class ChartControlAccessibleObject
Inherits Control.ControlAccessibleObject
Private chartControl As ChartControl
Public Sub New(ctrl As ChartControl)
MyBase.New(ctrl)
chartControl = ctrl
End Sub 'New
' Get the role for the Chart. This is used by accessibility programs.
Public Overrides ReadOnly Property Role() As AccessibleRole
Get
Return System.Windows.Forms.AccessibleRole.Chart
End Get
End Property
' Get the state for the Chart. This is used by accessibility programs.
Public Overrides ReadOnly Property State() As AccessibleStates
Get
Return AccessibleStates.ReadOnly
End Get
End Property
' The CurveLegend objects are "child" controls in terms of accessibility so
' return the number of ChartLengend objects.
Public Overrides Function GetChildCount() As Integer
Return chartControl.Legends.Length
End Function
' Get the Accessibility object of the child CurveLegend idetified by index.
Public Overrides Function GetChild(index As Integer) As AccessibleObject
If index >= 0 And index < chartControl.Legends.Length Then
Return chartControl.Legends(index).AccessibilityObject
End If
Return Nothing
End Function
' Helper function that is used by the CurveLegend's accessibility object
' to navigate between sibiling controls. Specifically, this function is used in
' the CurveLegend.CurveLegendAccessibleObject.Navigate function.
Friend Function NavigateFromChild(child As CurveLegend.CurveLegendAccessibleObject, _
navdir As AccessibleNavigation) As AccessibleObject
Select Case navdir
Case AccessibleNavigation.Down, AccessibleNavigation.Next
Return GetChild(child.ID + 1)
Case AccessibleNavigation.Up, AccessibleNavigation.Previous
Return GetChild(child.ID - 1)
End Select
Return Nothing
End Function
' Helper function that is used by the CurveLegend's accessibility object
' to select a specific CurveLegend control. Specifically, this function is used
' in the CurveLegend.CurveLegendAccessibleObject.Select function.
Friend Sub SelectChild(child As CurveLegend.CurveLegendAccessibleObject, selection As AccessibleSelection)
Dim childID As Integer = child.ID
' Determine which selection action should occur, based on the
' AccessibleSelection value.
If (selection And AccessibleSelection.TakeSelection) <> 0 Then
Dim i As Integer
For i = 0 To chartControl.Legends.Length - 1
If i = childID Then
chartControl.Legends(i).Selected = True
Else
chartControl.Legends(i).Selected = False
End If
Next i
' AccessibleSelection.AddSelection means that the CurveLegend will be selected.
If (selection And AccessibleSelection.AddSelection) <> 0 Then
chartControl.Legends(childID).Selected = True
End If
' AccessibleSelection.AddSelection means that the CurveLegend will be unselected.
If (selection And AccessibleSelection.RemoveSelection) <> 0 Then
chartControl.Legends(childID).Selected = False
End If
End If
End Sub 'SelectChild
End Class 'ChartControlAccessibleObject
' Inner Class that represents a legend for a curve in the chart.
Public Class CurveLegend
Private m_name As String
Private chart As ChartControl
Private accObj As CurveLegendAccessibleObject
Private m_selected As Boolean = True
Private m_location As Point
Public Sub New(chart As ChartControl, name As String)
Me.chart = chart
Me.m_name = name
End Sub 'New
' Gets the accessibility object for the curve legend.
Public ReadOnly Property AccessibilityObject() As AccessibleObject
Get
If accObj Is Nothing Then
accObj = New CurveLegendAccessibleObject(Me)
End If
Return accObj
End Get
End Property
' Gets the bounds for the curve legend.
Public ReadOnly Property Bounds() As Rectangle
Get
Return New Rectangle(Location, Size)
End Get
End Property
' Gets or sets the location for the curve legend.
Public Property Location() As Point
Get
Return m_location
End Get
Set
m_location = value
chart.Invalidate()
' Notifies the chart of the location change. This is used for
' the accessibility information. AccessibleEvents.LocationChange
' tells the chart the reason for the notification.
chart.ExposeAccessibilityNotifyClients(AccessibleEvents.LocationChange, _
CType(AccessibilityObject, CurveLegendAccessibleObject).ID)
End Set
End Property
' Gets or sets the Name for the curve legend.
Public Property Name() As String
Get
Return m_name
End Get
Set
If m_name <> value Then
m_name = value
chart.Invalidate()
' Notifies the chart of the name change. This is used for
' the accessibility information. AccessibleEvents.NameChange
' tells the chart the reason for the notification.
chart.ExposeAccessibilityNotifyClients(AccessibleEvents.NameChange, _
CType(AccessibilityObject, CurveLegendAccessibleObject).ID)
End If
End Set
End Property
' Gets or sets the Selected state for the curve legend.
Public Property Selected() As Boolean
Get
Return m_selected
End Get
Set
If m_selected <> value Then
m_selected = value
chart.Invalidate()
' Notifies the chart of the selection value change. This is used for
' the accessibility information. The AccessibleEvents value varies
' on whether the selection is true (AccessibleEvents.SelectionAdd) or
' false (AccessibleEvents.SelectionRemove).
If m_selected Then
chart.ExposeAccessibilityNotifyClients(AccessibleEvents.SelectionAdd, _
CType(AccessibilityObject, CurveLegendAccessibleObject).ID)
Else
chart.ExposeAccessibilityNotifyClients(AccessibleEvents.SelectionRemove, _
CType(AccessibilityObject, CurveLegendAccessibleObject).ID)
End If
End If
End Set
End Property
' Gets the Size for the curve legend.
Public ReadOnly Property Size() As Size
Get
Dim legendHeight As Integer = chart.Font.Height + 4
Dim g As Graphics = chart.CreateGraphics()
Dim legendWidth As Integer = CInt(g.MeasureString(Name, chart.Font).Width) + 4
Return New Size(legendWidth, legendHeight)
End Get
End Property
' Inner class CurveLegendAccessibleObject represents accessible information
' associated with the CurveLegend object.
Public Class CurveLegendAccessibleObject
Inherits AccessibleObject
Private curveLegend As CurveLegend
Public Sub New(curveLegend As CurveLegend)
Me.curveLegend = curveLegend
End Sub 'New
' Private property that helps get the reference to the parent ChartControl.
Private ReadOnly Property ChartControl() As ChartControlAccessibleObject
Get
Return CType(Parent, ChartControlAccessibleObject)
End Get
End Property
' Friend helper function that returns the ID for this CurveLegend.
Friend ReadOnly Property ID() As Integer
Get
Dim i As Integer
For i = 0 To (ChartControl.GetChildCount()) - 1
If ChartControl.GetChild(i) Is Me Then
Return i
End If
Next i
Return - 1
End Get
End Property
' Gets the Bounds for the CurveLegend. This is used by accessibility programs.
Public Overrides ReadOnly Property Bounds() As Rectangle
Get
' The bounds is in screen coordinates.
Dim loc As Point = curveLegend.Location
Return New Rectangle(curveLegend.chart.PointToScreen(loc), curveLegend.Size)
End Get
End Property
' Gets or sets the Name for the CurveLegend. This is used by accessibility programs.
Public Overrides Property Name() As String
Get
Return curveLegend.Name
End Get
Set
curveLegend.Name = value
End Set
End Property
' Gets the Curve Legend Parent's Accessible object.
' This is used by accessibility programs.
Public Overrides ReadOnly Property Parent() As AccessibleObject
Get
Return curveLegend.chart.AccessibilityObject
End Get
End Property
' Gets the role for the CurveLegend. This is used by accessibility programs.
Public Overrides ReadOnly Property Role() As AccessibleRole
Get
Return System.Windows.Forms.AccessibleRole.StaticText
End Get
End Property
' Gets the state based on the selection for the CurveLegend.
' This is used by accessibility programs.
Public Overrides ReadOnly Property State() As AccessibleStates
Get
Dim stateTemp As AccessibleStates = AccessibleStates.Selectable
If curveLegend.Selected Then
stateTemp = stateTemp Or AccessibleStates.Selected
End If
Return stateTemp
End Get
End Property
' Navigates through siblings of this CurveLegend. This is used by accessibility programs.
Public Overrides Function Navigate(navdir As AccessibleNavigation) As AccessibleObject
' Use the Friend NavigateFromChild helper function that exists
' on ChartControlAccessibleObject.
Return ChartControl.NavigateFromChild(Me, navdir)
End Function
' Selects or unselects this CurveLegend. This is used by accessibility programs.
Public Overrides Sub [Select](selection As AccessibleSelection)
' Use the internal SelectChild helper function that exists
' on ChartControlAccessibleObject.
ChartControl.SelectChild(Me, selection)
End Sub
End Class 'CurveLegendAccessibleObject
End Class 'CurveLegend
End Class 'ChartControl
End Namespace 'ChartControlNameSpace
[C#]
using System;
using System.Drawing;
using System.Windows.Forms;
namespace ChartControl
{
public class Form1 : System.Windows.Forms.Form
{
// Test out the Chart Control.
private ChartControl chart1;
[STAThread]
static void Main()
{
Application.Run(new Form1());
}
public Form1() {
// Create a chart control and add it to the form.
this.chart1 = new ChartControl();
this.ClientSize = new System.Drawing.Size(920, 566);
this.chart1.Location = new System.Drawing.Point(47, 16);
this.chart1.Size = new System.Drawing.Size(600, 400);
this.Controls.Add(this.chart1);
}
}
// Declare a chart control that demonstrates accessibility in Windows Forms.
public class ChartControl : System.Windows.Forms.UserControl
{
private CurveLegend legend1;
private CurveLegend legend2;
public ChartControl()
{
// The ChartControl draws the chart in the OnPaint override.
SetStyle(ControlStyles.ResizeRedraw, true);
SetStyle(ControlStyles.DoubleBuffer, true);
SetStyle(ControlStyles.AllPaintingInWmPaint, true);
this.BackColor = System.Drawing.Color.White;
this.Name = "ChartControl";
this.Click += new System.EventHandler(this.ChartControl_Click);
this.QueryAccessibilityHelp +=
new System.Windows.Forms.QueryAccessibilityHelpEventHandler(
this.ChartControl_QueryAccessibilityHelp);
// The CurveLengend is not Control-based, it just
// represents the parts of the legend.
legend1 = new CurveLegend(this, "A");
legend1.Location = new Point(20, 30);
legend2 = new CurveLegend(this, "B");
legend2.Location = new Point(20, 50);
}
// Overridden to return the custom AccessibleObject
// for the entire chart.
protected override AccessibleObject CreateAccessibilityInstance()
{
return new ChartControlAccessibleObject(this);
}
protected override void OnPaint(PaintEventArgs e)
{
// The ChartControl draws the chart in the OnPaint override.
base.OnPaint(e);
Rectangle bounds = this.ClientRectangle;
int border = 5;
// Draws the legends first.
StringFormat format = new StringFormat();
format.Alignment = StringAlignment.Center;
format.LineAlignment = StringAlignment.Center;
if (legend1 != null) {
if (legend1.Selected) {
e.Graphics.FillRectangle(new SolidBrush(Color.Blue), legend1.Bounds);
} else {
e.Graphics.DrawRectangle(Pens.Blue, legend1.Bounds);
}
e.Graphics.DrawString(legend1.Name, this.Font, Brushes.Black, legend1.Bounds, format);
}
if (legend2 != null) {
if (legend2.Selected) {
e.Graphics.FillRectangle(new SolidBrush(Color.Red), legend2.Bounds);
} else {
e.Graphics.DrawRectangle(Pens.Red, legend2.Bounds);
}
e.Graphics.DrawString(legend2.Name, this.Font, Brushes.Black, legend2.Bounds, format);
}
// Charts out the actual curves that represent data in the Chart.
bounds.Inflate(-border, -border);
Point[] curve1 = new Point[] {new Point(bounds.Left, bounds.Bottom),
new Point(bounds.Left + bounds.Width / 3, bounds.Top + bounds.Height / 5),
new Point(bounds.Right - bounds.Width / 3, (bounds.Top + bounds.Bottom) / 2),
new Point(bounds.Right, bounds.Top)};
Point[] curve2 = new Point[] {new Point(bounds.Left, bounds.Bottom - bounds.Height / 3),
new Point(bounds.Left + bounds.Width / 3, bounds.Top + bounds.Height / 5),
new Point(bounds.Right - bounds.Width / 3, (bounds.Top + bounds.Bottom) / 2),
new Point(bounds.Right, bounds.Top + bounds.Height / 2)};
// Draws the actual curve only if it is selected.
if (legend1.Selected) e.Graphics.DrawCurve(Pens.Blue, curve1);
if (legend2.Selected) e.Graphics.DrawCurve(Pens.Red, curve2);
e.Graphics.DrawRectangle(Pens.Blue, bounds);
}
// Handles the QueryAccessibilityHelp event.
private void ChartControl_QueryAccessibilityHelp(object sender,
System.Windows.Forms.QueryAccessibilityHelpEventArgs e)
{
e.HelpString = "Displays chart data";
}
// Handles the Click event for the chart.
// Toggles the selection of whatever legend was clicked on
private void ChartControl_Click(object sender, System.EventArgs e)
{
Point pt = this.PointToClient(Control.MousePosition);
if (legend1.Bounds.Contains(pt)) {
legend1.Selected = !legend1.Selected;
} else if (legend2.Bounds.Contains(pt)) {
legend2.Selected = !legend2.Selected;
}
}
// Gets an array of CurveLengends used in the Chart.
public CurveLegend[] Legends
{
get {
return new CurveLegend[] { legend1, legend2 };
}
}
// Inner class ChartControlAccessibleObject represents accessible information associated with the ChartControl.
// The ChartControlAccessibleObject is returned in the ChartControl.CreateAccessibilityInstance override.
public class ChartControlAccessibleObject : ControlAccessibleObject
{
ChartControl chartControl;
public ChartControlAccessibleObject(ChartControl ctrl) : base(ctrl)
{
chartControl = ctrl;
}
// Gets the role for the Chart. This is used by accessibility programs.
public override AccessibleRole Role
{
get {
return AccessibleRole.Chart;
}
}
// Gets the state for the Chart. This is used by accessibility programs.
public override AccessibleStates State
{
get {
return AccessibleStates.ReadOnly;
}
}
// The CurveLegend objects are "child" controls in terms of accessibility so
// return the number of ChartLengend objects.
public override int GetChildCount()
{
return chartControl.Legends.Length;
}
// Gets the Accessibility object of the child CurveLegend idetified by index.
public override AccessibleObject GetChild(int index)
{
if (index >= 0 && index < chartControl.Legends.Length) {
return chartControl.Legends[index].AccessibilityObject;
}
return null;
}
// Helper function that is used by the CurveLegend's accessibility object
// to navigate between sibiling controls. Specifically, this function is used in
// the CurveLegend.CurveLegendAccessibleObject.Navigate function.
internal AccessibleObject NavigateFromChild(CurveLegend.CurveLegendAccessibleObject child,
AccessibleNavigation navdir)
{
switch(navdir) {
case AccessibleNavigation.Down:
case AccessibleNavigation.Next:
return GetChild(child.ID + 1);
case AccessibleNavigation.Up:
case AccessibleNavigation.Previous:
return GetChild(child.ID - 1);
}
return null;
}
// Helper function that is used by the CurveLegend's accessibility object
// to select a specific CurveLegend control. Specifically, this function is used
// in the CurveLegend.CurveLegendAccessibleObject.Select function.
internal void SelectChild(CurveLegend.CurveLegendAccessibleObject child, AccessibleSelection selection)
{
int childID = child.ID;
// Determine which selection action should occur, based on the
// AccessibleSelection value.
if ((selection & AccessibleSelection.TakeSelection) != 0) {
for(int i = 0; i < chartControl.Legends.Length; i++) {
if (i == childID) {
chartControl.Legends[i].Selected = true;
} else {
chartControl.Legends[i].Selected = false;
}
}
// AccessibleSelection.AddSelection means that the CurveLegend will be selected.
if ((selection & AccessibleSelection.AddSelection) != 0) {
chartControl.Legends[childID].Selected = true;
}
// AccessibleSelection.AddSelection means that the CurveLegend will be unselected.
if ((selection & AccessibleSelection.RemoveSelection) != 0) {
chartControl.Legends[childID].Selected = false;
}
}
}
}
// Inner Class that represents a legend for a curve in the chart.
public class CurveLegend
{
private string name;
private ChartControl chart;
private CurveLegendAccessibleObject accObj;
private bool selected = true;
private Point location;
public CurveLegend(ChartControl chart, string name)
{
this.chart = chart;
this.name = name;
}
// Gets the accessibility object for the curve legend.
public AccessibleObject AccessibilityObject
{
get {
if (accObj == null) {
accObj = new CurveLegendAccessibleObject(this);
}
return accObj;
}
}
// Gets the bounds for the curve legend.
public Rectangle Bounds
{
get {
return new Rectangle(Location, Size);
}
}
// Gets or sets the location for the curve legend.
public Point Location
{
get {
return location;
}
set {
location = value;
chart.Invalidate();
// Notifies the chart of the location change. This is used for
// the accessibility information. AccessibleEvents.LocationChange
// tells the chart the reason for the notification.
chart.AccessibilityNotifyClients(AccessibleEvents.LocationChange,
((CurveLegendAccessibleObject)AccessibilityObject).ID);
}
}
// Gets or sets the Name for the curve legend.
public string Name
{
get {
return name;
}
set {
if (name != value)
{
name = value;
chart.Invalidate();
// Notifies the chart of the name change. This is used for
// the accessibility information. AccessibleEvents.NameChange
// tells the chart the reason for the notification.
chart.AccessibilityNotifyClients(AccessibleEvents.NameChange,
((CurveLegendAccessibleObject)AccessibilityObject).ID);
}
}
}
// Gets or sets the Selected state for the curve legend.
public bool Selected
{
get {
return selected;
}
set {
if (selected != value)
{
selected = value;
chart.Invalidate();
// Notifies the chart of the selection value change. This is used for
// the accessibility information. The AccessibleEvents value depends upon
// if the selection is true (AccessibleEvents.SelectionAdd) or
// false (AccessibleEvents.SelectionRemove).
chart.AccessibilityNotifyClients(
selected ? AccessibleEvents.SelectionAdd : AccessibleEvents.SelectionRemove,
((CurveLegendAccessibleObject)AccessibilityObject).ID);
}
}
}
// Gets the Size for the curve legend.
public Size Size
{
get {
int legendHeight = chart.Font.Height + 4;
Graphics g = chart.CreateGraphics();
int legendWidth = (int)g.MeasureString(Name, chart.Font).Width + 4;
return new Size(legendWidth, legendHeight);
}
}
// Inner class CurveLegendAccessibleObject represents accessible information
// associated with the CurveLegend object.
public class CurveLegendAccessibleObject : AccessibleObject
{
private CurveLegend curveLegend;
public CurveLegendAccessibleObject(CurveLegend curveLegend) : base()
{
this.curveLegend = curveLegend;
}
// Private property that helps get the reference to the parent ChartControl.
private ChartControlAccessibleObject ChartControl
{
get {
return Parent as ChartControlAccessibleObject;
}
}
// Internal helper function that returns the ID for this CurveLegend.
internal int ID
{
get {
for(int i = 0; i < ChartControl.GetChildCount(); i++) {
if (ChartControl.GetChild(i) == this) {
return i;
}
}
return -1;
}
}
// Gets the Bounds for the CurveLegend. This is used by accessibility programs.
public override Rectangle Bounds
{
get {
// The bounds is in screen coordinates.
Point loc = curveLegend.Location;
return new Rectangle(curveLegend.chart.PointToScreen(loc), curveLegend.Size);
}
}
// Gets or sets the Name for the CurveLegend. This is used by accessibility programs.
public override string Name
{
get {
return curveLegend.Name;
}
set {
curveLegend.Name = value;
}
}
// Gets the Curve Legend Parent's Accessible object.
// This is used by accessibility programs.
public override AccessibleObject Parent
{
get {
return curveLegend.chart.AccessibilityObject;
}
}
// Gets the role for the CurveLegend. This is used by accessibility programs.
public override AccessibleRole Role
{
get {
return AccessibleRole.StaticText;
}
}
// Gets the state based on the selection for the CurveLegend.
// This is used by accessibility programs.
public override AccessibleStates State
{
get {
AccessibleStates state = AccessibleStates.Selectable;
if (curveLegend.Selected)
{
state |= AccessibleStates.Selected;
}
return state;
}
}
// Navigates through siblings of this CurveLegend. This is used by accessibility programs.
public override AccessibleObject Navigate(AccessibleNavigation navdir)
{
// Uses the internal NavigateFromChild helper function that exists
// on ChartControlAccessibleObject.
return ChartControl.NavigateFromChild(this, navdir);
}
// Selects or unselects this CurveLegend. This is used by accessibility programs.
public override void Select(AccessibleSelection selection)
{
// Uses the internal SelectChild helper function that exists
// on ChartControlAccessibleObject.
ChartControl.SelectChild(this, selection);
}
}
}
}
}
[C++]
#using <mscorlib.dll>
#using <Accessibility.dll>
#using <System.dll>
#using <System.Windows.Forms.dll>
#using <System.Drawing.dll>
using namespace System;
using namespace System::Drawing;
using namespace System::Windows::Forms;
// Declare a chart control that demonstrates accessibility in Windows Forms.
public __gc class ChartControl : public System::Windows::Forms::UserControl {
public:
__gc class ChartControlAccessibleObject; // forward declaration
// Inner Class that represents a legend for a curve in the chart.
public:
__gc class CurveLegend {
// Inner class CurveLegendAccessibleObject represents accessible information
// associated with the CurveLegend object.
public:
__gc class CurveLegendAccessibleObject : public AccessibleObject {
private:
CurveLegend* curveLegend;
public:
CurveLegendAccessibleObject(CurveLegend* curveLegend) : AccessibleObject() {
this->curveLegend = curveLegend;
}
// Private property that helps get the reference to the parent ChartControl.
private:
__property ChartControlAccessibleObject* get_ChartControl() {
return dynamic_cast<ChartControlAccessibleObject*>(Parent);
}
// Internal helper function that returns the ID for this CurveLegend.
public private:
__property int get_ID() {
for (int i = 0; i < ChartControl->GetChildCount(); i++) {
if (ChartControl->GetChild(i) == this) {
return i;
}
}
return -1;
}
// Gets the Bounds for the CurveLegend. This is used by accessibility programs.
public:
__property Rectangle get_Bounds() {
// The bounds is in screen coordinates.
Point loc = curveLegend->Location;
return Rectangle(curveLegend->chart->PointToScreen(loc), curveLegend->Size);
}
// Gets or sets the Name for the CurveLegend. This is used by accessibility programs.
__property String* get_Name() {
return curveLegend->Name;
}
__property void set_Name(String* value) {
curveLegend->Name = value;
}
// Gets the Curve Legend Parent's Accessible object.
// This is used by accessibility programs.
__property AccessibleObject* get_Parent() {
return curveLegend->chart->AccessibilityObject;
}
// Gets the role for the CurveLegend. This is used by accessibility programs.
__property System::Windows::Forms::AccessibleRole get_Role() {
return AccessibleRole::StaticText;
}
// Gets the state based on the selection for the CurveLegend.
// This is used by accessibility programs.
__property AccessibleStates get_State() {
AccessibleStates state = AccessibleStates::Selectable;
if (curveLegend->Selected) {
state = static_cast<AccessibleStates>( state | AccessibleStates::Selected );
}
return state;
}
// Navigates through siblings of this CurveLegend. This is used by accessibility programs.
AccessibleObject* Navigate(AccessibleNavigation navdir) {
// Uses the internal NavigateFromChild helper function that exists
// on ChartControlAccessibleObject.
return ChartControl->NavigateFromChild(this, navdir);
}
// Selects or unselects this CurveLegend. This is used by accessibility programs.
void Select(AccessibleSelection selection) {
// Uses the internal SelectChild helper function that exists
// on ChartControlAccessibleObject.
ChartControl->SelectChild(this, selection);
}
}; // class CurveLgendAccessibleObject
private:
String* name;
ChartControl* chart;
CurveLegendAccessibleObject* accObj;
bool selected;
Point location;
public:
CurveLegend(ChartControl* chart, String* name) {
this->chart = chart;
this->name = name;
selected = true;
}
// Gets the accessibility object for the curve legend.
__property AccessibleObject* get_AccessibilityObject() {
if (accObj == 0) {
accObj = new CurveLegendAccessibleObject(this);
}
return accObj;
}
// Gets the bounds for the curve legend.
__property Rectangle get_Bounds() {
return Rectangle(Location, Size);
}
// Gets or sets the location for the curve legend.
__property Point get_Location() {
return location;
}
__property void set_Location(Point value) {
location = value;
chart->Invalidate();
// Notifies the chart of the location change. This is used for
// the accessibility information. AccessibleEvents::LocationChange
// tells the chart the reason for the notification.
chart->AccessibilityNotifyClients(AccessibleEvents::LocationChange,
(dynamic_cast<CurveLegendAccessibleObject*>(AccessibilityObject))->ID);
}
// Gets or sets the Name for the curve legend.
__property String* get_Name() {
return name;
}
__property void set_Name(String* value) {
if (name != value) {
name = value;
chart->Invalidate();
// Notifies the chart of the name change. This is used for
// the accessibility information. AccessibleEvents::NameChange
// tells the chart the reason for the notification.
chart->AccessibilityNotifyClients(AccessibleEvents::NameChange,
(dynamic_cast<CurveLegendAccessibleObject*>(AccessibilityObject))->ID);
}
}
// Gets or sets the Selected state for the curve legend.
__property bool get_Selected() {
return selected;
}
__property void set_Selected(bool value) {
if (selected != value) {
selected = value;
chart->Invalidate();
// Notifies the chart of the selection value change. This is used for
// the accessibility information. The AccessibleEvents value depends upon
// if the selection is true (AccessibleEvents::SelectionAdd) or
// false (AccessibleEvents::SelectionRemove).
chart->AccessibilityNotifyClients(selected ? AccessibleEvents::SelectionAdd : AccessibleEvents::SelectionRemove,
(dynamic_cast<CurveLegendAccessibleObject*>(AccessibilityObject))->ID);
}
}
// Gets the Size for the curve legend.
__property System::Drawing::Size get_Size() {
int legendHeight = chart->Font->Height + 4;
Graphics* g = chart->CreateGraphics();
int legendWidth = (int)g->MeasureString(Name, chart->Font).Width + 4;
return System::Drawing::Size(legendWidth, legendHeight);
}
}; // class CurveLegend
private:
CurveLegend* legend1;
CurveLegend* legend2;
public:
ChartControl() {
// The ChartControl draws the chart in the OnPaint .
SetStyle(ControlStyles::ResizeRedraw, true);
SetStyle(ControlStyles::DoubleBuffer, true);
SetStyle(ControlStyles::AllPaintingInWmPaint, true);
this->BackColor = System::Drawing::Color::White;
this->Name = S"ChartControl";
this->Click += new System::EventHandler(this, &ChartControl::ChartControl_Click);
this->QueryAccessibilityHelp +=
new System::Windows::Forms::QueryAccessibilityHelpEventHandler(this, &ChartControl::ChartControl_QueryAccessibilityHelp);
// The CurveLengend is not Control-based, it just
// represents the parts of the legend.
legend1 = new CurveLegend(this, S"A");
legend1->Location = Point(20, 30);
legend2 = new CurveLegend(this, S"B");
legend2->Location = Point(20, 50);
}
// Overridden to return the custom AccessibleObject
// for the entire chart.
protected:
AccessibleObject* CreateAccessibilityInstance() {
return new ChartControlAccessibleObject(this);
}
void OnPaint(PaintEventArgs* e) {
// The ChartControl draws the chart in the OnPaint .
System::Windows::Forms::UserControl::OnPaint(e);
Rectangle bounds = this->ClientRectangle;
int border = 5;
// Draws the legends first.
StringFormat* format = new StringFormat();
format->Alignment = StringAlignment::Center;
format->LineAlignment = StringAlignment::Center;
if (legend1 != 0) {
if (legend1->Selected) {
e->Graphics->FillRectangle(new SolidBrush(Color::Blue), legend1->Bounds);
} else {
e->Graphics->DrawRectangle(Pens::Blue, legend1->Bounds);
}
e->Graphics->DrawString(legend1->Name, this->Font, Brushes::Black, RectangleF::op_Implicit(legend1->Bounds), format);
}
if (legend2 != 0) {
if (legend2->Selected) {
e->Graphics->FillRectangle(new SolidBrush(Color::Red), legend2->Bounds);
} else {
e->Graphics->DrawRectangle(Pens::Red, legend2->Bounds);
}
e->Graphics->DrawString(legend2->Name, this->Font, Brushes::Black, RectangleF::op_Implicit(legend2->Bounds), format);
}
// Charts out the actual curves that represent data in the Chart.
bounds.Inflate(-border, -border);
Point temp1[] = { Point(bounds.Left, bounds.Bottom),
Point(bounds.Left + bounds.Width / 3, bounds.Top + bounds.Height / 5),
Point(bounds.Right - bounds.Width / 3, (bounds.Top + bounds.Bottom) / 2),
Point(bounds.Right, bounds.Top)};
Point curve1[] = temp1;
Point temp2[] = { Point(bounds.Left, bounds.Bottom - bounds.Height / 3),
Point(bounds.Left + bounds.Width / 3, bounds.Top + bounds.Height / 5),
Point(bounds.Right - bounds.Width / 3, (bounds.Top + bounds.Bottom) / 2),
Point(bounds.Right, bounds.Top + bounds.Height / 2)};
Point curve2[] = temp2;
// Draws the actual curve only if it is selected.
if (legend1->Selected) e->Graphics->DrawCurve(Pens::Blue, curve1);
if (legend2->Selected) e->Graphics->DrawCurve(Pens::Red, curve2);
e->Graphics->DrawRectangle(Pens::Blue, bounds);
}
// Handles the QueryAccessibilityHelp event.
private:
void ChartControl_QueryAccessibilityHelp(Object* /*sender*/,
System::Windows::Forms::QueryAccessibilityHelpEventArgs* e) {
e->HelpString = S"Displays chart data";
}
// Handles the Click event for the chart.
// Toggles the selection of whatever legend was clicked on
void ChartControl_Click(Object* /*sender*/, System::EventArgs* /*e*/) {
Point pt = this->PointToClient(Control::MousePosition);
if (legend1->Bounds.Contains(pt)) {
legend1->Selected = !legend1->Selected;
} else if (legend2->Bounds.Contains(pt)) {
legend2->Selected = !legend2->Selected;
}
}
// Gets an array of CurveLengends used in the Chart.
public:
__property CurveLegend* get_Legends()[] {
CurveLegend* temp3[] = { legend1, legend2 };
return temp3;
}
// Inner class ChartControlAccessibleObject represents accessible information associated with the ChartControl.
// The ChartControlAccessibleObject is returned in the ChartControl::CreateAccessibilityInstance .
__gc class ChartControlAccessibleObject : public ControlAccessibleObject {
ChartControl* chartControl;
public:
ChartControlAccessibleObject(ChartControl* ctrl) : ControlAccessibleObject (ctrl) {
chartControl = ctrl;
}
// Gets the role for the Chart. This is used by accessibility programs.
__property System::Windows::Forms::AccessibleRole get_Role() {
return AccessibleRole::Chart;
}
// Gets the state for the Chart. This is used by accessibility programs.
__property AccessibleStates get_State() {
return AccessibleStates::ReadOnly;
}
// The CurveLegend objects are "child" controls in terms of accessibility so
// return the number of ChartLengend objects.
int GetChildCount() {
return chartControl->Legends->Length;
}
// Gets the Accessibility object of the child CurveLegend idetified by index.
AccessibleObject* GetChild(int index) {
if (index >= 0 && index < chartControl->Legends->Length) {
return chartControl->Legends[index]->AccessibilityObject;
}
return 0;
}
// Helper function that is used by the CurveLegend's accessibility object
// to navigate between sibiling controls. Specifically, this function is used in
// the CurveLegend::CurveLegendAccessibleObject.Navigate function.
public private:
AccessibleObject* NavigateFromChild(CurveLegend::CurveLegendAccessibleObject* child,
AccessibleNavigation navdir) {
switch(navdir) {
case AccessibleNavigation::Down:
case AccessibleNavigation::Next:
return GetChild(child->ID + 1);
case AccessibleNavigation::Up:
case AccessibleNavigation::Previous:
return GetChild(child->ID - 1);
}
return 0;
}
// Helper function that is used by the CurveLegend's accessibility object
// to select a specific CurveLegend control. Specifically, this function is used
// in the CurveLegend::CurveLegendAccessibleObject.Select function.
void SelectChild(CurveLegend::CurveLegendAccessibleObject* child, AccessibleSelection selection) {
int childID = child->ID;
// Determine which selection action should occur, based on the
// AccessibleSelection value.
if ((selection & AccessibleSelection::TakeSelection) != 0) {
for (int i = 0; i < chartControl->Legends->Length; i++) {
if (i == childID) {
chartControl->Legends[i]->Selected = true;
} else {
chartControl->Legends[i]->Selected = false;
}
}
// AccessibleSelection->AddSelection means that the CurveLegend will be selected.
if ((selection & AccessibleSelection::AddSelection) != 0) {
chartControl->Legends[childID]->Selected = true;
}
// AccessibleSelection->AddSelection means that the CurveLegend will be unselected.
if ((selection & AccessibleSelection::RemoveSelection) != 0) {
chartControl->Legends[childID]->Selected = false;
}
}
}
}; // class ChartControlAccessibleObject
}; // class ChartControl
public __gc class Form1 : public System::Windows::Forms::Form {
// Test out the Chart Control.
private:
ChartControl* chart1;
public:
Form1() {
// Create a chart control and add it to the form.
this->chart1 = new ChartControl();
this->ClientSize = System::Drawing::Size(920, 566);
this->chart1->Location = System::Drawing::Point(47, 16);
this->chart1->Size = System::Drawing::Size(600, 400);
this->Controls->Add(this->chart1);
}
}; // class Form1
[STAThread]
int main() {
Application::Run(new Form1());
}
[JScript] JScript のサンプルはありません。Visual Basic、C#、および C++ のサンプルを表示するには、このページの左上隅にある言語のフィルタ ボタン をクリックします。
必要条件
名前空間: System.Windows.Forms
プラットフォーム: Windows 98, Windows NT 4.0, Windows Millennium Edition, Windows 2000, Windows XP Home Edition, Windows XP Professional, Windows Server 2003 ファミリ
アセンブリ: System.Windows.Forms (System.Windows.Forms.dll 内)