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

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

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

Re[3]: ユーザーコントロールにオブジェクトを追加する方法


(過去ログ 54 を表示中)

[トピック内 9 記事 (1 - 9 表示)]  << 0 >>

■30510 / inTopicNo.1)  ユーザーコントロールにオブジェクトを追加する方法
  
□投稿者/ たま (8回)-(2008/12/25(Thu) 14:15:59)

分類:[VB.NET/VB2005 以降] 

開発環境:WindowsXP Pro SP2
     Visual Basic 2005

質問:ユーザーコントロール(テキストボックスとボタンのみ配置)を作成し、別フォームにそのユーザーコントロールを貼り付けます。

フォーム側の[デザイン画面]から貼り付けたユーザーコントロールに対してオブジェクト(テキストボックス等)を追加するにはどうしたらよいのでしょうか?

もちろんユーザーコントロール内に追加したオブジェクトは、ユーザーコントロール自身で認識されなくてはなりません。

例えばなんですが、DataGridViewのプロパティにはColumnsというものがあって、そこからDataGridViewの列を追加できると思うんですが、同じようなことをユーザーコントロールに対してもやりたいのです。

DataGridViewもユーザーコントロールも私の中では同じオブジェクトとして認識しているので、できそうな気がするのですが…。

どうかご教授のほうよろしくお願いします。


引用返信 編集キー/
■30517 / inTopicNo.2)  Re[1]: ユーザーコントロールにオブジェクトを追加する方法
□投稿者/ たくボン (124回)-(2008/12/25(Thu) 15:21:12)
No30510 (たま さん) に返信
> 開発環境:WindowsXP Pro SP2
> 例えばなんですが、DataGridViewのプロパティにはColumnsというものがあって、そこからDataGridViewの列を追加できると思うんですが、同じようなことをユーザーコントロールに対してもやりたいのです。

Columnsはコントロールなの?
コントロールを追加するってことはどのような前提のもとに実装されるか?
そもそも汎用性を持たせるためのUserControlに、コントロールを追加するメリットは?

以上の点を踏まえ、再設計することをお勧めします。
できないことはないと思うけど、するメリットが感じられないです。
引用返信 編集キー/
■30520 / inTopicNo.3)  Re[2]: ユーザーコントロールにオブジェクトを追加する方法
□投稿者/ たま (9回)-(2008/12/25(Thu) 15:49:47)
No30517 (たくボン さん) に返信

返信ありがとうございます。

> Columnsはコントロールなの?

Columnsがコントロールに値するものなのかそうでないのかは分かりません。

ただ、Columnsの(コレクション)をクリックすると、列の編集や列の追加が画面から出来ます。

ユーザーコントロールにも同じようなものがないかと探しているのです。


> コントロールを追加するってことはどのような前提のもとに実装されるか?
> そもそも汎用性を持たせるためのUserControlに、コントロールを追加するメリットは?

今回のユーザーコントロールは、他のプログラム(アプリケーション)からでも共通で使用できるということを前提に作ろうと考えています。
ユーザーコントロール内にはテキストボックスとDataGridViewがあって、テキストボックスの値をGridに追加したり、Gridの値を選択することでテキストボックスに反映させたりする仕様になっています。

この部分は共通仕様なのですが、プログラム(アプリケーション)ごとにユーザーコントロール内の必要なテキストボックスの数が異なるため、その部分だけ増減できないものかと思いまして。


引用返信 編集キー/
■30531 / inTopicNo.4)  Re[3]: ユーザーコントロールにオブジェクトを追加する方法
□投稿者/ 通りすがり (39回)-(2008/12/25(Thu) 20:31:15)
No30520 (たま さん) に返信
> この部分は共通仕様なのですが、プログラム(アプリケーション)ごとにユーザーコントロール内の必要なテキストボックスの数が異なるため、その部分だけ増減できないものかと思いまして。

その条件なら、テキストボックスの数を設定するプロパティを作れば良いだけでは???
引用返信 編集キー/
■30532 / inTopicNo.5)  Re[3]: ユーザーコントロールにオブジェクトを追加する方法
□投稿者/ たくボン (125回)-(2008/12/25(Thu) 20:39:26)
No30520 (たま さん) に返信
> ■No30517 (たくボン さん) に返信
> ただ、Columnsの(コレクション)をクリックすると、列の編集や列の追加が画面から出来ます。

うん。それは、列っていう概念的な物だからコントロールとは別物だと思うな。
一度、自分でGridみたいなコントロールを自作してみればわかると思うけど、Columnはコントロールではありません。(厳密に言えばCellも違うけど)


>>そもそも汎用性を持たせるためのUserControlに、コントロールを追加するメリットは?
>
> 今回のユーザーコントロールは、他のプログラム(アプリケーション)からでも共通で使用できるということを前提に作ろうと考えています。
> ユーザーコントロール内にはテキストボックスとDataGridViewがあって、テキストボックスの値をGridに追加したり、Gridの値を選択することでテキストボックスに反映させたりする仕様になっています。

共通化という手法は、カスタムコントロールだけではないと思います:-)
今回のように、特定のGridと複数のテキストボックスを連携させる場合は、各コントロールを制御するクラスを用意するのがいいかもしれませんね。
制御クラスのコンストラクタに、Grid、TextBox(ジェネリックコレクションに追加するといいかも)のインスタンスを渡して、イベント等を動的に生成。
これならテキストボックスの数が増えても柔軟に操作できるし、Gridの仕様が変更になっても少ない修正で対応できると思います。

このやり方は、俺がもう13年前くらい前から使ってる手法だけど、今でも有効な手法だと思ってます:-)
引用返信 編集キー/
■30569 / inTopicNo.6)  Re[4]: ユーザーコントロールにオブジェクトを追加する方法
□投稿者/ たま (10回)-(2008/12/26(Fri) 16:44:22)
No30532 (たくボン さん) に返信

たくボンさん、通りすがりさん、ご回答ありがとうございます。

> うん。それは、列っていう概念的な物だからコントロールとは別物だと思うな。
> 一度、自分でGridみたいなコントロールを自作してみればわかると思うけど、Columnはコントロールではありません。(厳密に言えばCellも違うけど)
>

Columnはコントロールではないんですね…


> 共通化という手法は、カスタムコントロールだけではないと思います:-)
> 今回のように、特定のGridと複数のテキストボックスを連携させる場合は、各コントロールを制御するクラスを用意するのがいいかもしれませんね。
> 制御クラスのコンストラクタに、Grid、TextBox(ジェネリックコレクションに追加するといいかも)のインスタンスを渡して、イベント等を動的に生成。
> これならテキストボックスの数が増えても柔軟に操作できるし、Gridの仕様が変更になっても少ない修正で対応できると思います。
>
> このやり方は、俺がもう13年前くらい前から使ってる手法だけど、今でも有効な手法だと思ってます:-)

たくボンさんのご指摘どおり、コントロールを制御するクラスを用意して、コンストラクタにTextBoxのインスタンスを投げたら、ユーザーコントロール内にTextBoxが追加されました。

追加したTextBoxとGridの連携についてはどうやったらいいのか思考中です。

ただ、コードに書かずしてTextBoxの追加ってやはり難しいのでしょうか?
[デザイン画面]からだけでTextBoxを追加したり、追加したTextBoxとGridのとある列(Cell)を連携させることは難しいのでしょうか?
引用返信 編集キー/
■30572 / inTopicNo.7)  Re[4]: ユーザーコントロールにオブジェクトを追加する方法
□投稿者/ たま (11回)-(2008/12/26(Fri) 18:43:58)
No30532 (たくボン さん) に返信

> うん。それは、列っていう概念的な物だからコントロールとは別物だと思うな。
> 一度、自分でGridみたいなコントロールを自作してみればわかると思うけど、Columnはコントロールではありません。(厳密に言えばCellも違うけど)

度々すいません。

Gridみたいなコントロールを自作すれば分かるということなので、試しに作ってみようと思います。
しかし、どうやって作ったらいいのか自分で見当がつきません。
その部分を是非とも教えていただきたいのですが…

もし参考文献とかがあればそれでも結構です。


引用返信 編集キー/
■30573 / inTopicNo.8)  Re[5]: ユーザーコントロールにオブジェクトを追加する方法
□投稿者/ まどか (596回)-(2008/12/26(Fri) 20:15:17)
No30569 (たま さん) に返信
> ただ、コードに書かずしてTextBoxの追加ってやはり難しいのでしょうか?
> [デザイン画面]からだけでTextBoxを追加したり、追加したTextBoxとGridのとある列(Cell)を連携させることは難しいのでしょうか?

コードを書かずして、というのは無理です。
フォームのdesigner.vbを覗いてみてください。
プロパティウィンドウで太字になっているものに対してコードが生成されています。
なので、デザインで操作しても、その結果を再現するプロパティ設定等のコードを自動で生成することになります。
そしてユーザーコントロールは実行時にそのプロパティ値にしたがって動作するということになるでしょう。

実際の操作イメージとしては、ListViewのプロパティでImageListコントロールを選択するような感じになるでしょうか。

気になるのは、追加するテキストの持つ仕様がどっちかということです。
パターンできる=ユーザーコントロールの仕様、であれば利用者はどのパターンかだけを指定するという方法もあります。
少なくとも今の操作では「実行時」にControls.Addをすることになるので(しないとフォーカス順が。。。)
個人的には変な感じがします。
#プロパティ設定だけで閉じないし、実行時に見ず知らずの親からRemoveすることになる
#Addを生成すればよいけど親の生成したAddも実行されるしそれより後に実行される必要があるし。


話が「進行中」にマルチですか。
http://www.atmarkit.co.jp/bbs/phpBB/viewtopic.php?topic=47750&forum=7&0
これだと「おまえらじゃだめだ」と受け取られてしまいますよ。

引用返信 編集キー/
■30575 / inTopicNo.9)  Re[5]: ユーザーコントロールにオブジェクトを追加する方法
□投稿者/ たくボン (127回)-(2008/12/26(Fri) 20:30:54)
2008/12/26(Fri) 20:36:39 編集(投稿者)

No30569 (たま さん) に返信
マルチみたいなので削除します。
後は頑張ってください:-P
引用返信 編集キー/


トピック内ページ移動 / << 0 >>

このトピックに書きこむ

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

管理者用

- Child Tree -