ソースはココ。
/// <summary> /// フォーカス遷移機能を提供します。 /// ---Defined 2008/04/07 /// </summary> public class ControlSelecter { #region フィールドメンバ変数定義 /// <summary> /// 対象フォーム格納メンバ /// </summary> private readonly Form TargetForm; /// <summary> /// 無視するコントロールのタイプを指定します。 /// </summary> private readonly ArrayList IgnoreTypes; #endregion #region コンストラクタ /// <summary> /// コンストラクタ:デフォルト /// </summary> /// <param name="Target"></param> /// <param name="IgnoreControlTypes"></param> public ControlSelecter(Form Target, params Type[] IgnoreControlTypes) { this.TargetForm = Target; this.TargetForm.KeyPreview = true; this.IgnoreTypes = new ArrayList(IgnoreControlTypes); } /// <summary> /// コンストラクタ:オーバーロード /// </summary> /// <param name="Target"></param> public ControlSelecter(Form Target) : this(Target, new Type[]{}) { } #endregion #region フォーカス遷移 /// <summary> /// フォーカス遷移 /// </summary> public virtual void Next(KeyEventArgs e) { //不正パラメータ検知 if (this.TargetForm == null) { return; } if (e == null) { return; } if (!e.KeyCode.Equals(Keys.Enter)) { return; } //アクティブコントロール取得 System.Windows.Forms.Control ctl = this.TargetForm.ActiveControl; //コントロールチェック if (ctl == null) { return; } //フォーカス遷移 this.TargetForm.SelectNextControl(ctl, !e.Shift, true, true, true); //アクティブコントロールを再取得 ctl = this.TargetForm.ActiveControl; //再帰判定 if (!this.CanSelect(ctl)) { //再帰 this.Next(e); } e.Handled = true; } #endregion #region フォーカス遷移可否判定 /// <summary> /// フォーカス遷移可否判定 /// </summary> /// <param name="ctl">対象コントロール</param> /// <returns>可否</returns> protected virtual bool CanSelect(System.Windows.Forms.Control ctl) { bool result = false; //nullチェック if (ctl == null) { return result; } //非表示は不可 if (!ctl.Visible) { return result; } //使用不可は不可 if (!ctl.Enabled) { return result; } //無視するコントロールかどうか判定 if (this.IgnoreTypes != null) { if (this.IgnoreTypes.Contains(ctl.GetType())) { return result; } } return !result; } #endregion } |
0 件のコメント:
コメントを投稿