- さまかた
- 会議室デビュー日: 2008/08/21
- 投稿数: 5
- お住まい・勤務地: 東京都
|
投稿日時: 2008-12-26 19:02
初めて書き込みます。
開発環境:WindowsXP Pro SP2
Visual Basic 2005
問題:ユーザーコントロール(TextBoxとBottunとGridを配置)を作成し、別フォームにそのユーザーコントロールを貼り付けます。
フォーム側の[デザイン画面]から貼り付けたユーザーコントロールに対してオブジェクト(TextBox等)を追加するにはどうしたらよいのでしょうか?
もちろんユーザーコントロール内に追加したオブジェクトは、ユーザーコントロール自身で認識されなくてはなりません。
このようなことをする経緯としまして、今回のユーザーコントロールは、他のプログラム(アプリケーション)からでも共通で使用できるということを前提に作ろうと考えています。
ユーザーコントロール内のTextBoxの値をGridに追加したり、Gridの値を選択することでTextBoxに反映させたりする仕様になっています。
この部分は共通仕様なのですが、プログラム(アプリケーション)ごとにユーザーコントロール内の必要なTextBoxの数が異なるため、その部分だけ増減できないものかと思いまして。
以上が今回の経緯です。
例えばなんですが、DataGridViewのプロパティにはColumnsというものがあって、そこからDataGridViewの列を編集したり追加できると思うんですが、同じようなことをユーザーコントロールに対してもやりたいのです。
DataGridViewもユーザーコントロールも私の中では同じオブジェクトとして認識しているので、できそうな気がするのですが…。
ここまで長くなってしまいましたが、どうかご教授のほうよろしくお願いします。
|
- じゃんぬねっと
- ぬし
- 会議室デビュー日: 2004/12/22
- 投稿数: 7811
- お住まい・勤務地: 愛知県名古屋市
|
投稿日時: 2008-12-26 20:24
引用: |
|
さまかたさんの書き込み (2008-12-26 19:02) より:
フォーム側の[デザイン画面]から貼り付けたユーザーコントロールに対してオブジェクト(TextBox等)を追加するにはどうしたらよいのでしょうか?
|
UserControl も Form もコンテナ コントロールに過ぎないですから Form に Control を追加するのと同じ方法でできます。 対象の UserControl のインスタンスの Controls プロパティから Add メソッドで TextBox 等を追加してください。
引用: |
|
もちろんユーザーコントロール内に追加したオブジェクトは、ユーザーコントロール自身で認識されなくてはなりません。
|
通常は UserControl 自身で追加するので当然管理はできます。
引用: |
|
このようなことをする経緯としまして、今回のユーザーコントロールは、他のプログラム(アプリケーション)からでも共通で使用できるということを前提に作ろうと考えています。
ユーザーコントロール内のTextBoxの値をGridに追加したり、Gridの値を選択することでTextBoxに反映させたりする仕様になっています。
|
無理に相違点まで取り込んで共通化する必要はないと思います。 よほど汎用性に富んでいないと可読性を損なうだけです。
単純に入力項目が可変であるという流れであれば、
引用: |
|
この部分は共通仕様なのですが、プログラム(アプリケーション)ごとにユーザーコントロール内の必要なTextBoxの数が異なるため、その部分だけ増減できないものかと思いまして。
|
そういったものは List、View、Grid 系のいずれかが利用できないかをまず考えたほうがよろしいですね。
引用: |
|
例えばなんですが、DataGridViewのプロパティにはColumnsというものがあって、そこからDataGridViewの列を編集したり追加できると思うんですが、同じようなことをユーザーコントロールに対してもやりたいのです。
|
TextBox でないとダメな場合は、UserControl に RowCount のようなプロパティを設けて、UserControl 自身が Control を生成してレイアウトするという流れになるでしょう。 Control の生成と追加方法は前述どおりです。 プロパティは System.Int32 型の行数、列数などを示すプロパティで良いでしょう。
_________________ C# と VB.NET の入門サイト
じゃんぬねっと日誌
|
- Jitta
- ぬし
- 会議室デビュー日: 2002/07/05
- 投稿数: 6267
- お住まい・勤務地: 兵庫県・海手
|
投稿日時: 2008-12-26 20:39
情報共有のためのリンク
http://bbs.wankuma.com/index.cgi?mode=al2&namber=30510
|
- passol
- 常連さん
- 会議室デビュー日: 2008/12/12
- 投稿数: 20
|
投稿日時: 2008-12-27 03:42
こんにちは、passolです。
上記のマルチポスト先で、
引用: |
|
Gridみたいなコントロールを自作すれば分かるということなので、試しに作ってみようと思います。
しかし、どうやって作ったらいいのか自分で見当がつきません。
その部分を是非とも教えていただきたいのですが…
|
とあるので、とっかかり程度にtextBoxの数をプロパティで指定できるサンプルを以下に記載します。
コード: |
|
'(前提としてpanelコントロール「Panel1」をUserControl1に貼り付けていることとする。)
Public Class UserControl1
'(前提として、panelをformに配置して置く)
Private textBoxWidth As Integer = 100
Private textBoxHeight As Integer = 20
Private colCount As Integer = 0
Public Property textBoxColCount() As Integer
Get
Return colCount
End Get
Set(ByVal value As Integer)
If value < 0 Then
MsgBox("0以下は指定できません。")
Exit Property
End If
Me.SuspendLayout()
If colCount < value Then
For colLoopCount As Integer = colCount + 1 To value
Dim createTextBox As New TextBox
createTextBox.Location = New System.Drawing.Point((colLoopCount - 1) * textBoxWidth, textBoxHeight)
createTextBox.Name = "TextBox" & colLoopCount.ToString
createTextBox.Multiline = True
createTextBox.Size = New System.Drawing.Size(textBoxWidth, textBoxHeight)
createTextBox.TabIndex = colLoopCount
Me.Panel1.Controls.Add(createTextBox)
Next
Else
For colLoopCount As Integer = colCount To value + 1 Step -1
Me.Panel1.Controls.Remove(Me.Panel1.Controls.Item("TextBox" & colLoopCount))
Next
End If
Me.ResumeLayout()
colCount = value
End Set
End Property
End Class
|
上記コードは、さっぱり役にたたないコードですが、とっかかり程度にはなると思います。
またマルチポスト先の文章の引用なんですが、
引用: |
|
ただ、コードに書かずしてTextBoxの追加ってやはり難しいのでしょうか?
[デザイン画面]からだけでTextBoxを追加したり、追加したTextBoxとGridのとある列(Cell)を連携させることは難しいのでしょうか?
|
上記は結構大変です。
実装を試みるなら、下記URLを参考にしてみてください。
http://www.microsoft.com/japan/msdn/net/general/vsnetpropbrow.aspx#vsnetpropbrow_topic03
|
- さまかた
- 会議室デビュー日: 2008/08/21
- 投稿数: 5
- お住まい・勤務地: 東京都
|
投稿日時: 2009-01-06 14:41
返信遅くなり申し訳ありませんでした。
じゃんぬねっとさん、Jittaさん、passolさん、ご丁寧な回答ありがとうございました。
頂いた回答をもとに、もう少し自分で考えてみます。
|