コントロール (Control)

目次

スレッドを使用する場合には、コントロールの呼び出しに注意が必要です。

クラス階層

  • System.Object
    • System.Windows.Forms.MessageBox
    • System.Windows.Forms.Application
    • System.Windows.Forms.Clipboard
    • System.MarshalByRefObject
      • System.ComponentModel.Component
        • System.Windows.Forms.CommonDialog
          • System.Windows.Forms.ColorDialog
          • System.Windows.Forms.FileDialog
            • System.Windows.Forms.OpenFileDialog
            • System.Windows.Forms.SaveFileDialog
          • System.Windows.Forms.FolderBrowserDialog
          • System.Windows.Forms.FontDialog
          • System.Windows.Forms.PageSetupDialog
          • System.Windows.Forms.PrintDialog
        • System.Windows.Forms.Control
          • System.Windows.Forms.AxHost
          • System.Windows.Forms.ButtonBase
            • System.Windows.Forms.Button
            • System.Windows.Forms.CheckBox
            • System.Windows.Forms.RadioButton
          • System.Windows.Forms.DataGrid
          • System.Windows.Forms.DataGridView
          • System.Windows.Forms.DataVisualization.Charting.Chart
          • System.Windows.Forms.DateTimePicker
          • System.Windows.Forms.GroupBox
          • System.Windows.Forms.Integration.ElementHost
          • System.Windows.Forms.Label
          • System.Windows.Forms.ListControl
          • System.Windows.Forms.ListView
          • System.Windows.Forms.MdiClient
          • System.Windows.Forms.MonthCalendar
          • System.Windows.Forms.PictureBox
          • System.Windows.Forms.PrintPreviewControl
          • System.Windows.Forms.ProgressBar
          • System.Windows.Forms.ScrollableControl
            • System.Windows.Forms.ContainerControl
              • System.Windows.Forms.Form
              • System.Windows.Forms.PropertyGrid
              • System.Windows.Forms.SplitContainer
              • System.Windows.Forms.ToolStripContainer
              • System.Windows.Forms.ToolStripPanel
              • System.Windows.Forms.UpDownBase (スピンボックス / アップダウン コントロール)
                • System.Windows.Forms.DomainUpDown
                • System.Windows.Forms.NumericUpDown
              • System.Windows.Forms.UserControl
            • System.Windows.Forms.Design.ComponentTray
            • System.Windows.Forms.Panel
            • System.Windows.Forms.ToolStrip
          • System.Windows.Forms.ScrollBar
          • System.Windows.Forms.Splitter
          • System.Windows.Forms.StatusBar
          • System.Windows.Forms.TabControl
          • System.Windows.Forms.TextBoxBase
            • System.Windows.Forms.TextBox
            • System.Windows.Forms.RichTextBox
            • System.Windows.Forms.MaskedTextBox
          • System.Windows.Forms.ToolBar (後継はToolStrip)
          • System.Windows.Forms.TrackBar
          • System.Windows.Forms.TreeView
          • System.Windows.Forms.WebBrowserBase
        • System.Windows.Forms.Menu (メニュー)
        • System.Windows.Forms.Timer
        • System.Windows.Forms.ToolTip
  • System.Windows.Threading.DispatcherObject
    • System.Windows.DependencyObject
      • System.Windows.Freezable
Control Class (System.Windows.Forms) | Microsoft Docs

プロパティ

プロパティ 内容
string Name コントロールの名前
(プログラムの実行時にオブジェクトを評価するためのもの)
string Text コントロールに関連付けられたテキスト

用途は派生クラスによって異なり、たとえばFormではタイトルバーのテキストとして用いられるが、RichTextBoxではコントロール内に表示されるテキストとなる。Remarks - Control.Text Property (System.Windows.Forms) | Microsoft Docs

Object Tag コントロールに関する任意のデータの格納 Control.Tag プロパティ (System.Windows.Forms) | MSDN
int TabIndex コントロールのタブ オーダー (tab order)
bool IsDisposed trueならば、コントロールは破棄されている
bool Enabled trueならば、ユーザーからの操作に応答する
bool Visible trueならば、コントロールとその子コントロールが表示されている
Cursor DefaultCursor 既定のカーソル
Cursor Cursor マウスポインタがコントロール上にあるときに表示されるカーソル
bool UseWaitCursor trueならば、待機カーソルを使用する

UIスレッドをブロックする処理はカーソルの変更もブロックするため、時間のかかる処理は別スレッドとしなければ、このプロパティへの設定は意味をなさない。

Control Parent このコントロールの親コントロール

RadioButtonなど他のコントロールに格納されるコントロールは、FindForm()とは異なる値となる

Font Font コントロールで使用されるフォント。既定値はDefaultFontプロパティの値

親コントロールまたはアンビエント プロパティ (ambient property) に有効な値があるならば、DefaultFontより優先される Font - Control.cs

コントロールによっては親コントロールのFontを引き継がないため、個別に設定する必要がある

Keys ModifierKeys 修飾キー (Shift、Ctrl、Alt) の状態 How to: Determine Which Modifier Key Was Pressed | Microsoft Docs

どのキーも押されていなければKeys.None

Size Size コントロールの高さと幅

このプロパティが返すwidthやHeightに設定しても、コントロールのサイズに作用しない。そのためにはWidthプロパティなどに設定するか、新しく作成したSizeオブジェクトをこのプロパティに設定する

Size ClientSize コントロールのクライアント領域の高さと幅
int Width コントロールの幅 (SizeプロパティのWidthと同一)
AnchorStyles Anchor 親コントロールのどの辺との距離を一定とするか
(AnchorとDockは排他的で、後に設定されたほうが有効となる)
DockStyle Dock 親コントロールのどの辺に接触させるか
(AnchorとDockは排他的で、後に設定されたほうが有効となる)

同じ辺に複数のコントロールを結合させた場合はZオーダー (Z-order) に従い配置され、追加したものが端に、先のものが押し出される

IntPtr Handle コントロールに結びつけられているウィンドウ ハンドル

これはWindows HWNDの値であり、取得時に作成されていないときは強制的に作成される

     
プロパティ - Control Class (System.Windows.Forms) | Microsoft Docs

TabIndex

タブで選択されるコントロール順番は、Visual Studioのビュー デザイナーから設定すると簡単です。それには対象のコントロールを含むフォームをビュー デザイナーで開き、それにフォーカスがある状態で、メニューの【表示 → タブ オーダー】にチェックを入れます。そして設定するタブの順に、コントロールをクリックします。Changing the Tab Order of Controls | MSDN

参考

プロパティ バインディング … コントロールのプロパティとアプリケーション設定との拘束

メソッド

メソッド 機能
SuspendLayout() コントロールのレイアウト ロジックを一時的に停止させ、パフォーマンスを向上させる Control.SuspendLayout メソッド (System.Windows.Forms) | MSDN

これはコントロールに複数のコントロールを追加するときに、その都度レイアウトが調整されるのを抑制するためのもので、コントロールの内容の更新には無関係

ResumeLayout(Boolean) コントロールのレイアウト ロジックを再開させる。trueを渡すと、保留中のレイアウト要求の適用を強制する
PerformLayout() コントロールのレイアウト ロジックを、すべての子コントロールに適用するように強制する
WndProc(Message) Windowsメッセージを処理できる
PreProcessMessage(Message) メッセージ ループ内のキーボードや入力メッセージがディスパッチされる前に処理できる
CreateHandle() コントロールのハンドルを作成する
OnHandleCreated(EventArgs) HandleCreatedイベントを発生する
Focus() コントロールへ入力フォーカスを設定する

Focus()は独自のコントロールで使用するものであり、通常はSelect()を用いる。それが子コントロールならばActiveControl、フォームならばActivate()を用いる。

   
メソッド - Control Class (System.Windows.Forms) | Microsoft Docs

イベント

区分 イベント 発生タイミング
マウス EventHandler Click コントロールがクリックされたとき (Enterキーなどにより発生することもあるため、マウスによるクリックとは限らない)
MouseEventHandler MouseClick マウスでコントロールがクリックされたとき
MouseEventHandler MouseDoubleClick マウスでコントロールがダブルクリックされたとき
MouseEventHandler MouseMove コントロール上で、マウスポインタが移動したとき
キー PreviewKeyDownEventHandler PreviewKeyDown フォーカスがあるときに、キーが押されたとき (KeyDownより前に発生する)
KeyEventHandler KeyDown フォーカスがあるときに、キーが押されたとき。押されたキーの情報はKeyEventArgsで渡される Control.KeyDown イベント (System.Windows.Forms) | MSDN
ハンドル EventHandler HandleCreated コントロールのハンドルが、作成されたとき
EventHandler HandleDestroyed コントロールのハンドルが、破棄されているとき
ドラッグ&ドロップ DragEventHandler DragEnter コントロールの境界内へドラッグされたとき
DragEventHandler DragOver コントロールの境界内でドラッグされたとき
DragEventHandler DragDrop ドラッグ&ドロップ操作が完了したとき
EventHandler DragLeave コントロールの境界外へドラッグされたとき
     
イベント - Control Class (System.Windows.Forms) | Microsoft Docs

Click

このイベントではEventArgsしか渡されません。ボタンや位置などのマウスの情報が必要ならば、MouseClickを捕捉します。Remarks - Control.Click Event (System.Windows.Forms) | MSDN

Controlを継承したクラスによって、右クリックやダブルクリックなどへの応答が異なります。Remarks - Control.Click Event (System.Windows.Forms) | MSDN

Clickイベントを発生しないクラス

スタイルにStandardClickが設定されていないコントロールは、このClickイベントを発生させません。このスタイルが設定されているかどうかは、GetStyle()で確認できます。

bool style = GetStyle(ControlStyles.StandardClick);

MouseClick

ハンドラにはMouseEventArgsが渡されます。Control.MouseClick イベント (System.Windows.Forms) | MSDN

コントロール上でマウスがクリックされると、次の順でイベントが発生します。

  1. MouseDown … マウスボタンが押されたとき
  2. Click
  3. MouseClick
  4. MouseUp … マウスボタンが離されたとき
Remarks - Control.MouseClick Event (System.Windows.Forms) | MSDN

続けて2回クリックされたとき、OSによってそれがダブルクリックと認識されると、MouseClickの代わりにMouseDoubleClickが発生します。

MouseEventArgs
プロパティ 内容
MouseButtons Button 押されたマウス ボタン
int Clicks マウス ボタンが押されて離された回数
int Delta マウス ホイールの回転回数

(マウス ホイールのノッチ1つが1移動量に相当)

Point Location マウス イベント生成時のマウスのx座標とy座標

(フォームの左上を基準としたピクセル単位)

int X Location.Xと同じ
int Y Location.Yと同じ
プロパティ - MouseEventArgs クラス (System.Windows.Forms) | MSDN

PreviewKeyDown

このイベントはKeyDownイベントの前に発生し、TabEnterEscや方向キーなど、KeyDownイベントを発生させないキーに対して、そのイベントを発生するように指示できます。

private void button1_PreviewKeyDown(object sender, PreviewKeyDownEventArgs e)
{
    switch (e.KeyCode)
    {
        case Keys.Tab:
        case Keys.Enter:
            e.IsInputKey = true;
            break;
    }
}

private void button1_KeyDown(object sender, KeyEventArgs e)
{
    switch (e.KeyCode)
    {
        // このキーのPreviewKeyDownイベントでIsInputKey = trueとすることで、KeyDownイベントが発生する
        case Keys.Tab:
            break;

        case Keys.Enter:
            break;
    }
}
PreviewKeyDownEventArgs
プロパティ 内容
bool IsInputKey trueならば、通常の入力キー
     
PreviewKeyDownEventArgs クラス (System.Windows.Forms) | MSDN

KeyDown

特定の機能の呼び出しにキーを割り当てるのが目的ならばこのイベントを用いず、その機能のメニュー項目を作成し、それのShortcutKeysプロパティにキーを設定します。

なお修飾キーの状態は、静的プロパティであるControl.ModifierKeysから、イベントとは無関係に取得できます。

HandleCreated

このイベントは、コントロールのハンドルが作成されたときに発生します。Control.HandleCreated Event (System.Windows.Forms) | Microsoft Docs

そしてハンドルはコントロールが最初に読み込まれるときに作成されるため、FormのLoadに相当するイベントとして使用できます。c# - What is the Form "On_Load" equivalent for Controls? - Stack Overflow

フォーム上に配置されたコントロールでは、次の順でイベントが発生します。

  1. 親フォーム:HandleCreated
  2. 子コントロール:HandleCreated
  3. 親フォーム:Load

HandleDestroyed

このイベントは、コントロールのハンドルが破棄されているときに発生します。 Control.HandleDestroyed Event (System.Windows.Forms) | Microsoft Docs c# - What event signals that a UserControl is being destroyed? - Stack Overflow

フォーム上に配置されたコントロールでは、次の順でイベントが発生します。

  1. 親フォーム:FormClosing
  2. 親フォーム:FormClosed
  3. 親フォーム:Deactivate
  4. 親フォーム:HandleDestroyed
  5. 子コントロール:HandleDestroyed

コントロールの種類

プロジェクトにコントロールを追加するとき、用途によって異なる形式があります。

  形式 基本クラス 用途
コンポーネント クラス System.ComponentModel.Component Timerのような、UIのないコントロール
カスタム コントロール System.Windows.Forms.Control Buttonのような、UIのあるコントロール
ユーザー コントロール System.Windows.Forms.UserControl 複数のコントロールを配置したコンテナ
Windows フォーム System.Windows.Forms.Form ウィンドウの拡張
c# - What is the difference between User Control, Custom Control and Component? - Stack Overflow
MSDN (Microsoft Developer Network) から検索