チェックをはずせるラジオボタン
標準のRadioButtonでは、一度マウスでクリックしチェックをしてしまうと、オペレーションではチェックをはずすことができません。そこで、マウスクリックイベントを拡張し、マウスの左クリックでチェックし、右クリックをチェックをはずすことのできるRadioButtonを作成してみます。
OnMouseDownのオーバーライド
テキストボックスと同様に、Radiobuttonでも、オーバーライドを行って、コントロールのイベントを処理します。まず、OnMouseDownメソッドをオーバーライドします。
protected override void OnMouseDown( System.Windows.Forms.MouseEventArgs e) { base.OnMouseDown (e); }
その後、以下のプログラムを追加します。これで右クリックするとチェックをはずせるようになります。
// マウスの右クリック時にチェックをはずす if( this.Checked && e.Button.Equals(MouseButtons.Right) ) { this.Checked = false; }
ラジオボタングループが必須入力の場合
ユーザーのオペレーションやさまざまな状況により、RadioButtonのグループが必須になることが考えられます。そこでプロパティを追加し、右クリックの有効、無効を制限できるような機能を追加します。
/// <summary> チェックを外せるかどうか </summary> private bool canRemove = false; /// <summary> /// チェックを外せるかどうかを取得または設定します /// </summary> [Bindable(true), Category("追加プロパティ"), DefaultValue(true), Description("チェックを外せるかどうか")] public bool CanRemove { get { return this.canRemove; } set { this.canRemove = value; } }
プロパティの追加に伴い、OnMouseDownのオーバーライドも少し変更します。
/// <summary> /// OnMouseDownのオーバーライド /// </summary> /// <param name="e"></param> protected override void OnMouseDown( System.Windows.Forms.MouseEventArgs e) { if( this.Checked && e.Button.Equals(MouseButtons.Right) && this.canRemove ) this.Checked = false; base.OnMouseDown (e); }
おわりに
このように、標準のコントロールにもともとあるメソッドをオーバーライドして、少しプログラムを追加することによって、共通的な振る舞いをすることができます。その結果、コーディングの量は使用するコントロールの量に比例して減らすことができます。
あくまで、サンプルですので、皆さんの思いつくままにやってみてはいかがでしょうか。
