6月 14

クリックイベントを発生させる

ボタンをマウスやキーボードから押した場合
Click イベントが発生しますが
これをプログラムから【押したことにしたい】場合があります。

あまり良い例ではありませんが、例えば、
文書を保存するSaveボタンを作ったとします。
Saveボタンを押すとClickイベントハンドらが呼び出され、文書を保存しますが
定期的に(10分に1回などにも)Save処理を行いたいとします。
この時、タイマーを利用して10分に1回、Saveボタンを【押したことにしたい】場合

Buttonコントロールの
PerformClick 関数をコールします。

    button1.PerformClick();	// button1コントロールのClickイベントを発生させる
6月 14

テキストの表示位置を設定する

ボタン内のテキスト表示位置を設定する場合は
TextAlign プロパティーの値を変更します。
通常は MiddleCenter です。

通常はプログラムからではなく
デザイン画面からプロパティーで設定することが多いと思います。

button_textalign

上のように、9種類から選択します。
設定を変更すると、デザイン画面にも反映されるので解りやすいです。

もちろん、プログラムから変更することも可能です。
その場合は下記のようになります。

    button1.TextAlign = ContentAlignment.MiddleCenter;  // 中断中央(デフォルト)の場合
    button1.TextAlign = ContentAlignment.TopLeft;       // 左上の場合
6月 14

デフォルトボタン/キャンセルボタンを設定する

フォーム上の
デフォルトボタン(Enterキー/Spaceキーで押されるボタン)
キャンセルボタン(ESCキーで押されるボタン)
を設定するには

フォームの
AcceptButton, CancelButtonプロパティーに
それぞれボタン名を指定します。

【補足】
フォーム上に複数のボタンが存在し、
デフォルトボタン以外のボタンがフォーカスを持つ場合は
フォーカスを持つボタンがデフォルトで押されます。

this.AcceptButton = button1;
this.CancelButton = button2;
6月 14

押されたままの状態にする

ボタンを押すと凹んだような外観になりますが
そのまま凹んだ外観をキープしたい場合は
ボタンコントロールではなく
チェックボックスコントロールを使います。
(チェックボックスの節を参照してください)

チェックボックスの外観を
ボタンのように変更することで
押された際、凹んだままのボタンを実装可能です。

チェックボックスコントロールの
Appearanceプロパティーに列挙体のButtonを設定します。

6月 14

ビットマップなどのイメージ(絵)を張り付ける

ボタンにテキストではなく、イメージを張り付けるには
Imageプロパティーにビットマップファイルなどの
ファイル名を指定します。

なお、イメージの配置位置は
ImageAlignプロパティーに
位置の列挙体を設定することで変更可能です。

イメージのファイル形式は
ビットマップ(.bmp)の他に
アイコン(.ico)や、PNG、JPG、GIFなどがありますので色々試してみてください。

【補足】
デザイン時からイメージを張り付けたい場合は
Imageプロパティーの…ボタンをクリックし、
目的の画像ファイルを選択してください。

また、イメージのみ表示して
ボタン上のテキストが不要な場合は
Textプロパティーの内容を”"としてください。

例:button1.Text = “”;

// ボタンに張り付けるイメージのファイル名を指定します。
// ファイルが存在しない場合は
// System.IO.FileNotFoundException 例外が発生します。
button1.Image = System.Drawing.Image.FromFile(@"c:\unko.bmp");

// 表示位置は中央
button1.ImageAlign = System.Drawing.ContentAlignment.MiddleCenter;
6月 14

ボタンを有効/無効にする(押せる/押せないようにする)

ボタンに限らずですが
コントロールを有効、無効にする場合は
Enabled プロパティーに true あるいは false を設定します。

true:有効
false:無効

です。
下図では、左のボタンが有効、右のボタンが無効です。

デザイン時にEnabledプロパティーを設定
またはプログラムからEnabledプロパティーを設定します。

button_enable

    private void Form1_Load(object sender, EventArgs e)
    {
        button1.Enabled = true;     // 押せる状態に
        button2.Enabled = false;    // 押せない状態に
    }
6月 13

フォームで押されたボタンの種類を表示元で取得する

下図のようなフォームの表示を例に
フォームで押されたボタンの種類を表示元で取得するサンプルを示します。

Form1よりForm2を呼び出し、
Form2が閉じられた際に
Form2で押されたボタンの種類を
Form1側(表示元)で取得します。

例)

    Form1
    ┏━━━━━━━━━━━┓
    ┃                      ┃
    ┃                      ┃
    ┃┏━━━━┓          ┃
    ┃┃button1 ┃          ┃
    ┃┗━━━━┛          ┃
    ┗━━━━━━━━━━━┛
    button1押下でForm2を表示

            ↓Form2を表示

    Form2
    ┏━━━━━━━━━━━━┓
    ┃                        ┃
    ┃                        ┃
    ┃┏━━━┓  ┏━━━━┓┃
    ┃┃  OK  ┃  ┃ Cancel ┃┃
    ┃┗━━━┛  ┗━━━━┛┃
    ┗━━━━━━━━━━━━┛
    いずれかのボタン押下で閉じる。

【解説】
呼び出し元では、フォームが閉じられた後で
DialogResultプロパティーの値を参照することで
何のボタンが押されたのかを判断します。

呼び先では、各ボタンのDialogResultプロパティーに
DialogResult列挙型の値をあらかじめ設定しておくことで
呼び出し元に最後に押されたボタンの種類を通知します。

//-------------------------------------
// Form1のソース
//-------------------------------------
private void button1_Click(object sender, System.EventArgs e)
{
    Form2 f2 = new Form2();

    // Form2をモーダル表示
    f2.ShowDialog();

    // Form2が閉じられた後、どのボタンが押されたのか判定
    switch( f2.DialogResult )
    {
        case DialogResult.OK:
            MessageBox.Show( "OK", "押されたボタンは" );
            break;
        case DialogResult.Cancel:
            MessageBox.Show( "Cancel", "押されたボタンは" );
            break;
    }
}

//-------------------------------------
// Form2のソース
//-------------------------------------
private void Form2_Load(object sender, System.EventArgs e)
{
    button1.DialogResult = DialogResult.OK;
    button2.DialogResult = DialogResult.Cancel;
}