したらばTOP ■掲示板に戻る■ 全部 1-100 最新50 | メール | |

コントロールモジュールでのデータ継承

1こじら:2010/05/20(木) 16:40:09
先日はありがとうございました
また、お礼の返事遅れてすみませんでした。
ソフト仕様組むって難しいですね
また、使っていてゆーざコントロールという使いまわし
できる事をしりました。(まだmだぜんぜん勉強不足です)

これで使いまわし楽になるかとトライしてみたら、いつもの如く
壁にあたってしましました。

内容は 
 ユーザーコントロールをMainのFORMにはりつけ、
ユーザーコントロール上の制御ボタンで、値を処理した結果を
MainのFORMのTextボックスに表示させる使用でTESTしてますが、
実行すると値が空で返ってきます。

プロパティやグローバル変数でトライしましたがだめでした。
値をFORMへ渡すにはどのようにすればよいでしょうか、
以下に

ソースを記載します。ゆーざーこんとろーる1,2はグローバル
とプロパティとでトライした時のものです。
MainのFormからどちらかで実行しています。

**********
Main
**********
Public Class Form1
Dim AA As New UCNT1.UserControl1
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
TextBox1.Text = AA.BTEST
End Sub
End Class
**********
User2 Prop
**********
Public Class Class1
Private _test As String
Public Property Test() As String
Get
Return _test
End Get
Set(ByVal value As String)
_test = value
End Set
End Property
End Class
Public Class UserControl2
Private ATEST As New Class1
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
ATEST.Test = "OK"
End Sub
Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click
ATEST.Test = "NG"
End Sub
Private Sub Button3_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button3.Click
TextBox1.Text = ATEST.Test
End Sub
Public Function BTEST() As String
Return ATEST.Test
End Function
End Class
**********
User2 Grob
**********
Public Class UserControl1
Private _test As String
Private Sub New()
' この呼び出しは、Windows フォーム デザイナで必要です。
InitializeComponent()
' InitializeComponent() 呼び出しの後で初期化を追加します。
End Sub
Private Sub UserControl1_Disposed(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Disposed
MyBase.Dispose()
End Sub
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
_test = "OK"
End Sub
Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click
_test = "NG"
End Sub
Private Sub Button3_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button3.Click
TextBox1.Text = _test
End Sub
Private Function BTEST() As String
Return _test
End Function
End Class

よろしくお願いします。

2igoten:2010/05/20(木) 18:04:03
Form1側
Dim AA As New UCNT1.UserControl1(Me)
としてAAに自分のインスタンスを送ります。

UserControl1側
Private F1 As Form1
Private Sub New(ByVal _F1 As Form1)
' この呼び出しは、Windows フォーム デザイナで必要です。
InitializeComponent()
' InitializeComponent() 呼び出しの後で初期化を追加します。
F1 = _F1
End Sub

これでUserControl1のインスタンスからForm1のインスタンスに
アクセスできます。

この辺は
http://www.geocities.jp/hatanero/form1andform2.html
のVB.NET Form1、Form2の相互参照と同じです

3こじら:2010/05/21(金) 07:30:23
有難うございます。
すみません、説明不足でしたForm1とユーザーコントロールがあり、
ユーザーコントロールの内容(Public値)をForm1で取得し、使用したいとい
というのが仕様でした。
また、ユーザーコントロールとForm1のプロジェクトを分けています。
当然Form1をスタートアッププロジェクトにしていますが、
Form1上でユーザーコントロールのインスタンス化はできるのですが
ユーザーコントロールからForm1を参照することができません。

1)プロジェクトが異なっても、お教え頂いたForm1,Form2の参照方法で
  同様にできるのでしょうか
2)ユーザーコントロール内で作成した値を Form1で直接読むとき
  Form1でユーザーコントロールをインスタンス化してみましたが
  値が読めなかったのですが、1)のプロジェクトを分けているからか
  方法が違うからでしょうか
トライしたプログラムを以下に
Form1 : ユーザーコントロール + テキストボックス1つ
Form2 : Button を3つ テキストボックス1つ +値を返すFunc関数1つ

Public Class Form1
Dim AA As New C12.UserControl1(Me)

Public ST As String
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
End Sub

Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
Dim BB As String
BB = AA.ABC
TextBox1.Text = BB
End Sub
End Class

Public Class UserControl1
Private _test As String
Private FF1 As Form
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
_test = "OK"
End Sub
Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click
_test = "NG"
End Sub
Private Sub Button3_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button3.Click
TextBox1.Text = _test
End Sub
Public Sub New(ByVal _F1 As Form)
' この呼び出しは、Windows フォーム デザイナで必要です。
InitializeComponent()
' InitializeComponent() 呼び出しの後で初期化を追加します。
FF1 = _F1
End Sub
Private Sub UserControl1_Disposed(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Disposed
MyBase.Dispose()
End Sub
Public Function ABC() As String
FF1()
ABC = _test
Return ABC
End Function
End Class

としています。間違えている点お気づきになられましたらお教え頂けないでしょうか。
宜しくお願いいたします。

4igoten:2010/05/21(金) 08:39:24
Public Sub New(ByVal _F1 As Form) は
Public Sub New(ByRef _F1 As Form) ですね
Private FF1 As Form は
Private FF1 As Form1ですね


新着レスの表示


名前: E-mail(省略可)

※書き込む際の注意事項はこちら

※画像アップローダーはこちら

(画像を表示できるのは「画像リンクのサムネイル表示」がオンの掲示板に限ります)

掲示板管理者へ連絡 無料レンタル掲示板