- - PR -
フォームに貼り付けた複数のユーザコントロール間で入れ替えをしたい
1
投稿者 | 投稿内容 | ||||
---|---|---|---|---|---|
|
投稿日時: 2006-07-27 19:30
いつも、お世話になっております。
フォームの下部にボタンがあり、 そのボタンを押すごとに自作のユーザコントロールがDockStyle.TopでControl.Addされるアプリを作成しました。 このユーザコントロールの入れ替え(順番の変更)をスマートに行うには良い方法はないでしょうか? 現在、どんくさい方法で実現しています。 ArrayListでコントロールの貼り付け順を記憶していき、 ArrayList内で順番変更を行う。 (例えば、4つのコントロールを貼り付け、0番と1番を入れ替える。1,0,2,3とする) 一度貼り付けたユーザコントロールをClearして、再度ArrayList内の順でAddしていく…。 この方法だと、入れ替えるたびに消しては表示し…の繰り返しで、 貼り付け量が多いほど悲惨な処理を行うわけでして。 Control[0] = Control[1]みたいに内部で簡単に処理させる方法があればご教授ください。 よろしくお願いいたします。 | ||||
|
投稿日時: 2006-07-27 19:43
仕様がどうしようもない場合もあるからなんで入れ替えをしなきゃいけないのか書こうぜ。な![ メッセージ編集済み 編集者: ぶさいくろう 編集日時 2006-07-27 19:46 ] | ||||
|
投稿日時: 2006-07-27 19:46
上文はコントロールが増えていくイメージですが、下文はコントロールが増えないイメージですね。下ですか? 入れ替えとは? DockStyle.Top で、Controls.Add されたら、他のコントロールの DockStyle も変えます? 少しイメージが掴めません。 _________________ 囚人のジレンマな日々 | ||||
|
投稿日時: 2006-07-28 12:56
ぶさいくろうさん、囚人さん、レスポンスありがとうございます。
言葉足らずですみません。 入れ替えの必要性は、不特定数のコントロールが格納されるため、 数が多くなった場合に、必要に応じて自由に順番の入れ替えができるようにしたいからです。 (タブブラウザのように多数あるタブの一部を入れ替える感じ) 説明不足でしたので、簡単なサンプルを載せます。 フォームに、パネルとボタン×2を貼り、ボタン1を押すことでそのパネル上にコントロールが 押した分だけ追加される仕組みになってます。 ボタン2を押すことで、パネル上のコントロールの2番目と1番目を入れ替えるようにしています。 ※ここではエラー処理を実装してません。 本来ならばドラッグなどで指定したコントロールを、任意のコントロールにドロップしたら そのドロップしたコントロールの上部に挿入入れ替えができるようにするつもりですが、 まずは、コントロールの入れ替えができるようにボタンによる決め打ちで実行してます。 実行することで、外観は変わりないですが、コントロール1番目と2番目の位置が入れ替わるようにしたいのですが、 最初に書いたとおり、消しては追加しているので、描き代わりが醜い(プログラム上も…)状態です。 アドバイスよろしくお願いいたします。 private void button1_Click(object sender, System.EventArgs e) { UserControl1 uc = new UserControl1(); this.m_aryList.Add(uc); this.panel1.Controls.Add(uc); uc.Dock = DockStyle.Top; uc.BringToFront(); uc.m_iID = this.m_iNo;//確認用 uc.label1.Text = this.m_iNo.ToString(); this.m_iNo++; } private void button2_Click(object sender, System.EventArgs e) { //指定したユーザコントロールの順番を入れ替えたい //例えば、0,1,2,3を0,2,1,3と表示させたい UserControl1 ucTarget = (UserControl1)this.m_aryList[2];//入れ替えターゲット UserControl1 ucClone = ucTarget.Clone();//コピー this.panel1.Controls.Clear(); this.m_aryList.Remove(ucTarget); this.m_aryList.Insert(1, ucClone);//順番入れ替え foreach(UserControl1 uc in this.m_aryList)//Array順に再追加 { this.panel1.Controls.Add(uc); uc.Dock = DockStyle.Top; uc.BringToFront(); } |
1