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

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

ログ内検索
  • キーワードを複数指定する場合は 半角スペース で区切ってください。
  • 検索条件は、(AND)=[A かつ B] (OR)=[A または B] となっています。
  • [返信]をクリックすると返信ページへ移動します。
キーワード/ 検索条件 /
検索範囲/ 強調表示/ ON (自動リンクOFF)
結果表示件数/ 記事No検索/ ON
大文字と小文字を区別する

No.87776 の関連記事表示

<< 0 >>
■87776  Re[4]: 別フォームにデータを渡したい
□投稿者/ 魔界の仮面弁士 -(2018/06/29(Fri) 14:47:52)
    a■No87765 (いまそかり さん) に返信
    > <修正後ソースコード>
    > 'xmlからデータを取得
    > Function xmlGet(Byval a As String,Byval b As String)

    Function の戻り値のデータ型が示されていません。
    戻り値が無いのなら Sub にするべきですし、
    戻り値があるのなら、末尾に「As String」などの記述が必要です。


    > * 'ボタンクリックイベント(Form2が開く)
    > * Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
    > *  Dim frm As Form2
    > *  frm = New Form2(df)
    > *  frm.Show() '(※1)

    この段階で、df の中身が Nothing になっていたりはしませんか?


    > * 'Form2のオーバーロード(引数あり)
    > * Public Sub New()
    > *  InitializeComponent()
    > * End Sub
    > * 'Form2のオーバーロード(引数あり)
    > * Public Sub New(df As DataSet)
    > *  IntializeComponent()
    > *  Me.df = df
    > * End Sub

    この 2 箇所の IntializeComponent() の行で、[F9]キーを押してブレークポイントを貼り、
    この行で一時停止させてみてください。



    (※1) からは、後者「Sub New(df As DataSet)」側の IntializeComponent が呼ばれるはずです。
    後者が呼ばれた場合は、引数 df が Nothing で無いことを確認してください。
    もし、引数に Nothing が渡されるとマズイ場合には、IntializeComponent を呼ぶ前に
     If df Is Nothing Then
      Throw New ArgumentNullException("df")
     End If
    などを設けておくとよいでしょう。


    一方、前者「Sub New()」側の IntializeComponent が呼ばれることがあるとすれば、
    それは想定外の呼び出しとなります。
    引数が渡されなければ、Me.df も Nothing のままになってしまうわけで。

    もしも前者が呼ばれるようであれば、それがどこから呼び出されているのか
    コードを見直してみてみてください。

    たとえば、前者を
     Public Sub New()
    のままにしただけなら、コンパイルが通る(ただし実行時エラー)のに、それを
     Private Sub New()
    にしただけでコンパイルエラーになるようであれば、現在のプロジェクト設定
    もしくはコーディングのどこかが間違っているのだと思います。


    本来は前者を削除して、後者だけにしたいところなのですが、その場合、
    特定の条件を満たしたときに、自動生成される *.designer.vb 内で、
    VB のコンパイルエラー BC30109 を生じさせることがあるのが悩ましいところ。

    デザイナコードでエラーが生じると、話がややこしくなるため、
    No87759 では意図的に、引数なしコンストラクタを残すように案内しています。
    (きちんと理解している人なら、前者を削除した状態でも正常に動作するコードを書けるはず)




    > fType.InvokeMember("Form1_Load",
    >          BindingFlags.NonPublic Or

    他の方も書かれていますが、Reflection で解決するのは禁じ手です。
    Reflection が必要となるのは、非常に限定された処理であって、
    今回のケースで使うようなものではありません。


    それに、Form1_Load を自前で呼び出すのも避けるべきです。
    イベントハンドラーを、普通のメソッドのように呼び出すことはもちろん可能ですが、
    これは本来「呼びだされる物」であって、「呼び出す物」ではありませんので。
記事No.87756 のレス /過去ログ151より / 関連記事表示
削除チェック/



<< 0 >>

パスワード/

- Child Tree -