- PR -

【C#】フォーカス制御について教えて下さい。

1
投稿者投稿内容
未記入
大ベテラン
会議室デビュー日: 2006/12/15
投稿数: 157
投稿日時: 2008-08-11 19:07
.NetFrameWork2.0(C#.Net2005)にて開発を行っております。
ユーザー様より現行システムに合わせて、Up、Downキーでのフォーカス遷移制御を求められ、
以下のコードをフォームに組み込みました。(FormのKeyPreviewはTrueにしてあります。)

コード:
private void Form1_KeyDown(object sender, KeyEventArgs e)
{
    Boolean result=false;
    if (e.KeyCode == Keys.Up)
    {
        //result = this.SelectNextControl(this.ActiveControl, false, true, true, true);
        result = ProcessTabKey(false);
    }
    if (e.KeyCode == Keys.Down)
    {
        //result = this.SelectNextControl(this.ActiveControl, true, true, true, true);
        result = ProcessTabKey(true);
    }
    MessageBox.Show(result.ToString());
}



大まかな所は問題なく動いております。
ただ、splitContainerだけ、splitContainer内の先頭のコントロールにフォーカスがある状態で
 ・Tabキーでは同splitContainer内の次のコントロールへフォーカス移動
 ・Downキーでは同splitContainer外の次のコントロールへフォーカス移動
となってしまいます。
コード中のProcessTabKeyをSelectNextControlに変えても同じ結果でした。
また、resultにはTrueが返って来ております。

1、この動作は正常なのか?
2、回避策があるのか

以上、御存知な方がおられましたら、御教示下さい。
よろしくお願い致します。(タスケテ
かずくん
ぬし
会議室デビュー日: 2003/01/08
投稿数: 759
お住まい・勤務地: 太陽系第三惑星
投稿日時: 2008-08-12 01:19
引用:

未記入さんの書き込み (2008-08-11 19:07) より:
コード中のProcessTabKeyをSelectNextControlに変えても同じ結果でした。


SelectNextControlを実行する際のthis.ActiveControlはどうなってる?
入力コントロールがActiveContorolであれば、
コード:
this.ActiveControl.Parent.SelectNextControl(...)


としたらどうなる?

未記入
大ベテラン
会議室デビュー日: 2006/12/15
投稿数: 157
投稿日時: 2008-08-12 09:45
resありがとうございます。

>SelectNextControlを実行する際のthis.ActiveControlはどうなってる?
this.ActiveControl.Nameを随時表示するようにして確認しました。
splitContainer内のtextBoxにフォーカスがあたっている時もthis.ActiveControlは
textBoxではなくsplitContainerとなっていました。
他に、Panel,TablControl,GroupBoxで試しましたが、これらの場合はフォーカスのあたっている
textBoxがthis.ActiveControlとなっております。

>this.ActiveControl.Parent.SelectNextControl(...)
ActivControlがsplitContainerなのでParentはFormとなり、splitContainer外の次のコントロール
へフォーカス移動します。
(第一引数はthis.ActiveControlとしています。)
また、直接splitContainerのtextBoxのParentを見たところ、SplitterPanelとなっており
このSplitterPanelの親が見つからないようでした。
SplitterPanelのParentのリファレンスに下記記載がありました。

コード:
インフラストラクチャ。この SplitterPanel を含むSplitContainerを取得または設定します。
このクラスでは、このプロパティは使用されません。



この辺でSplitContainer内のコントロールから親子関係を遡れなくなっているために
TabとSelectNextControl,ProcessTabKeyの動作に違いが出るのかと一人納得しております。

SplitContainerの従属関係を触れない以上はフォーカス制御を自作するしか無いかと考え始めましたが
回避策等ありましたら御教示下さい。
1

スキルアップ/キャリアアップ(JOB@IT)