コントロール (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
          • 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 クラス (System.Windows.Forms) | MSDN

プロパティ

プロパティ 内容
string Name コントロールの名前
(プログラムの実行時にオブジェクトを評価するためのもの)
Object Tag コントロールに関する任意のデータの格納 Control.Tag プロパティ (System.Windows.Forms) | MSDN
int TabIndex コントロールのタブ オーダー (tab order)
bool IsDisposed trueならば、コントロールは破棄されている
Cursor DefaultCursor 既定のカーソル
Cursor Cursor マウスポインタがコントロール上にあるときに表示されるカーソル
bool UseWaitCursor trueならば、待機カーソルを使用する

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

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

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

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

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

Keys ModifierKeys 修飾キー (Shift、Ctrl、Alt) の状態 How to: Determine Which Modifier Key Was Pressed | Microsoft Docs
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 クラス (System.Windows.Forms) | MSDN

TabIndex

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

参考

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

メソッド

メソッド 機能
SuspendLayout() コントロールのレイアウト ロジックを一時的に停止させ、パフォーマンスを向上させる Control.SuspendLayout メソッド (System.Windows.Forms) | MSDN
ResumeLayout() レイアウト ロジックを再開させる
WndProc(Message) Windowsメッセージを処理できる
PreProcessMessage(Message) メッセージ ループ内のキーボードや入力メッセージがディスパッチされる前に処理できる
   
メソッド - Control クラス (System.Windows.Forms) | MSDN

イベント

区分 イベント 発生タイミング
マウス 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 コントロールのハンドルが、破棄されているとき
     
イベント - 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

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

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

コントロールの種類

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

  形式 基本クラス 用途
コンポーネント クラス System.ComponentModel.Component UIのないコントロール。Timerのような
カスタム コントロール System.Windows.Forms.Control UIのあるコントロール。Buttonのような
ユーザー コントロール 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) から検索