C# と VB.NET の質問掲示板

わんくま同盟

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト


(過去ログ 7 を表示中)
■7702 / 6階層)  画面内のすべてのコントロールをTabIndex順に取得したいのですが。
□投稿者/ 魔界の仮面弁士 少佐(190回)-(2006/10/23(Mon) 15:15:00)

分類:[C#] 

No7697に返信(まどかさんの記事)
> #スコープとかまだ不安、誰か添削して。

同じ TabIndex があった場合の対処は置いとくとして……

> = new SortedList< int32,Control> ();
で、微妙にスペルミスしている点とか、かな。


No7698に返信(自分の記事)
> [フォーム]
> ┣[panel1] … TabIndex=2
> ┃┣[textBox1] … TabIndex=2
> ┃┗[textBox2] … TabIndex=0
> ┣[panel2] … TabIndex=3
> ┃┣[textBox3] … TabIndex=1
> ┃┗[textBox4] … TabIndex=3
> ┣[textBox5] … TabIndex=1
> ┗[textBox6] … TabIndex=0

上記のパターンで、
 textBox6, textBox5, textBox2, textBox1, textBox3, textBox4
の順になるようにしてみました。あんまりテストしてませんけど。(汗


/**** C# 2.0 で書いたので、.NET 1.x では動きません。****/

private void Form1_Load(object sender, EventArgs e)
{
TextBoxBase[] textBoxes = GetAllControls<TextBoxBase>(this);

//チェック用
foreach (TextBoxBase textBox in textBoxes)
{
Trace.WriteLine(String.Format("TabIndex={0} - Name=\"{1}\"",
textBox.TabIndex, textBox.Name));
}
}

//すべての子孫コントロールを列挙して、TabIndex順に返す。
private Control[] GetAllControls(Control parentControl)
{
if (parentControl == null)
{
throw new ArgumentNullException();
}

//順序無視で追加(子コントロールは含めない)。
List<Control> controls = new List<Control>();
foreach (Control control in parentControl.Controls)
{
controls.Add(control);
}

//TabIndex順にソートする。
controls.Sort(delegate(Control x, Control y) { return x.TabIndex - y.TabIndex; });

//再帰して、子コントロールを挿入する。
for (int i = controls.Count - 1; i >= 0; i--)
{
Control container = controls[i];
if (container.HasChildren)
{
controls.InsertRange(i, GetAllControls(container));
}
}
return controls.ToArray();
}

//コントロールの配列を、コントロールの型でフィルタする。
public T[] GetAllControls<T>(Control parentControl) where T : Control
{
List<Control> controls = new List<Control>(GetAllControls(parentControl));
List<Control> filtered = controls.FindAll(delegate(Control c) { return c is T; });
return Array.ConvertAll<Control, T>(filtered.ToArray(),
delegate(Control value) { return value as T; });
}


0
編集キー/

前の記事(元になった記事) 次の記事(この記事の返信)
返信無し
 
上記関連ツリー

画面内のすべてのコントロールをTabIndex順に取得したいのです.. / mizuki (06/10/23(Mon) 11:11) #7689 0
│││││││││││││└ Re[1]: 画面内のすべてのコントロールをTabIndex順に取得した.. / まどか (06/10/23(Mon) 11:37) #7691 0
││││││││││││└ Re[2]: 画面内のすべてのコントロールをTabIndex順に取得した.. / mizuki (06/10/23(Mon) 12:00) #7692 0
│││││││││││└ Re[3]: 画面内のすべてのコントロールをTabIndex順に取得した.. / ダッチ (06/10/23(Mon) 12:38) #7693 0
││││││││││└ Re[4]: 画面内のすべてのコントロールをTabIndex順に取得した.. / mizuki (06/10/23(Mon) 12:54) #7694 0
│││││││││└ Re[3]: 画面内のすべてのコントロールをTabIndex順に取得した.. / まどか (06/10/23(Mon) 13:53) #7697 0
││││││││└ Re[5]: 画面内のすべてのコントロールをTabIndex順に取得した.. / 魔界の仮面弁士 (06/10/23(Mon) 14:12) #7698 0
│││││││└ Re[6]: 画面内のすべてのコントロールをTabIndex順に取得した.. / まどか (06/10/23(Mon) 14:41) #7699 0
││││││└ Re[4]: 画面内のすべてのコントロールをTabIndex順に取得した.. / ダッチ (06/10/23(Mon) 15:04) #7701 0
│││││└ 画面内のすべてのコントロールをTabIndex順に取得したいのです.. / 魔界の仮面弁士 (06/10/23(Mon) 15:15) #7702 0 ←Now
││││└ Re[8]: 画面内のすべてのコントロールをTabIndex順に取得した.. / 魔界の仮面弁士 (06/10/23(Mon) 15:22) #7703 0
│││└ Re[5]: 画面内のすべてのコントロールをTabIndex順に取得した.. / ぽぴ王子 (06/10/23(Mon) 15:37) #7704 0
││└ Re[9]: 画面内のすべてのコントロールをTabIndex順に取得した.. / mizuki (06/10/23(Mon) 15:39) #7705 0
│└ Re[8]: 画面内のすべてのコントロールをTabIndex順に取得した.. / まどか (06/10/23(Mon) 15:43) #7706 0
Re[6]: 画面内のすべてのコントロールをTabIndex順に取得した.. / mizuki (06/10/23(Mon) 15:55) #7707 0
Re[7]: 画面内のすべてのコントロールをTabIndex順に取得した.. / mizuki (06/10/23(Mon) 15:59) #7708 解決済み

上記ツリーを一括表示 / 上記ツリーをトピック表示
 
上記の記事へ返信

過去ログには書き込み不可

管理者用

- Child Tree -