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

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

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

No.42605 の関連記事表示

<< 0 >>
■42605  別フォームのコントロールのTextが変更できない
□投稿者/ ミク -(2009/10/19(Mon) 12:10:15)

    分類:[.NET 全般] 

    開発環境:Visual Basic 2008
    使用言語:VB.net

    初めて書き込みさせていただきます。
    ミクと申します。
    VB.netは初心者です。

    現在、ShowDialog()メソッドを使用して呼び出したフォームから
    呼び出し元のフォームのコントロールのTextプロパティを変更したいのですが、

    呼び出し元フォーム名.コントロール名.Text="ABC"

    とプログラムしても反映されず(呼び出し元のフォームのコントロールのTextが変わらない)困っています。


    ◆詳細状況を以下に示します。
    フォームはA、B、Cの3つあります。
    スタートアップフォームはフォームAです。

    フォームAからShowDialog()でフォームBを呼び出しています。
    更に、フォームBからShowDialog()でフォームCを呼び出しています。

    このとき、フォームCからフォームBのコントロールのTextプロパティの変更ができません。

    フォームBをスタートアップフォームにすると、
    フォームCからフォームBのコントロールのTextプロパティを操作できました。

    Show()メソッドでも試してみましたが、同様の状態で解決しませんでした。



    どなたか、原因と解決方法を知っておられる方は、大変お手数ですがご教授のほどよろしくお願いいたします。






親記事 /過去ログ73より / 関連記事表示
削除チェック/

■42607  Re[1]: 別フォームのコントロールのTextが変更できない
□投稿者/ かずき -(2009/10/19(Mon) 12:24:28)
>
    > フォームAからShowDialog()でフォームBを呼び出しています。
    この部分を詳しく教えて下さい。
    多分
    
    Dim f As New フォームB
    f.ShowDialog()
    
    みたいにしてるんじゃないですか?
    フォーム名.プロパティ名でアクセスするときのフォームのインスタンスは暗黙的に
    作られるインスタンスなので、Newしたフォームとは別物です。
    多分、そのせいで変更されてないのではないでしょうか。
    
    
記事No.42605 のレス /過去ログ73より / 関連記事表示
削除チェック/

■42606  Re[1]: 別フォームのコントロールのTextが変更できない
□投稿者/ ヴァン -(2009/10/19(Mon) 12:21:31)
    No42605 (ミク さん) に返信

    症状が再現するミニマムコードを書いてください。
    どんなコードなのか解らないとアドバイスも何も出来ませんよ。
記事No.42605 のレス /過去ログ73より / 関連記事表示
削除チェック/

■42674  Re[2]: 別フォームのコントロールのTextが変更できない
□投稿者/ ミク -(2009/10/20(Tue) 09:32:01)
    >症状が再現するミニマムコードを書いてください。
    >どんなコードなのか解らないとアドバイスも何も出来ませんよ。
    
    申し訳ありませんでした。
    以下が症状が再現するミニマムコードです。
    
    
    ※各フォームには、ボタンとテキストボックスが1つずつ置かれています。
    
    'フォームA(スタートアップフォーム)
    Public Class FormA
        Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
            Dim f As New FormB
            f.ShowDialog()
        End Sub
    End Class
    
    
    'フォームB
    Public Class FormB
        Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
            Dim f As New FormC
            f.ShowDialog()
        End Sub
    End Class
    
    
    'フォームC
    Public Class FormC
        Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
            FormA.TextBox1.Text = "test"
            FormB.TextBox1.Text = "test"
        End Sub
    End Class
    
    実行してみたところ、スタートアップフォームのフォームAのテキストボックスは"test"と表示されましたが、
    フォームBのテキストボックスは表示されませんでした。
    
    
    ご覧の通り、かずきさんのおっしゃる通りのプログラムです。
    フォーム名.プロパティ名でアクセスするときのフォームのインスタンスを明示的に作成するにはどうすればよいのでしょうか?
    
記事No.42605 のレス /過去ログ73より / 関連記事表示
削除チェック/

■42683  Re[3]: 別フォームのコントロールのTextが変更できない
□投稿者/ まさる -(2009/10/20(Tue) 10:44:12)
>
    No42674 (ミク さん) に返信
    > フォーム名.プロパティ名でアクセスするときのフォームのインスタンスを明示的に作成するにはどうすればよいのでしょうか?
    
    まず、「フォーム名.プロパティ名」でアクセスするのをやめましょう。
    
    そして次は、FormBにFormAのフィールドを用意し、コンストラクタで受け渡すようにします。
    
    Public Class FormB
        Private _formA As FormA
    
        Public Sub New(ByVal form As FormA)
            _formA = form
        End Sub
    
        〜
    
    End Class
    
    あとは、FormBを作成する際のコンストラクタに、FormA自らを設定してやり、
    FormBではFormA用のフィールド(_formA)を使ってFormAのTextBoxにアクセスすればOKです。
    
        ' FormBの表示
        Dim f As New FormB(Me)
        f.ShowDialog()
    
        とやって、FormBでFormAのTextBoxにアクセスするには、
    
        _formA.TextBox1.Text = "ほげほげ"
    
    FormB→FormCも同じ方法でよいでしょう。
    
    ただし、本当はFormAにTextBoxの値を設定するためのプロパティなりメソッドなりを用意して、
    FormB、FormCではそのプロパティ、メソッドを呼び出す方がいいと思います。
記事No.42605 のレス /過去ログ73より / 関連記事表示
削除チェック/

■42686  Re[4]: 別フォームのコントロールのTextが変更できない
□投稿者/ ミク -(2009/10/20(Tue) 11:05:32)
    先ほどのミニマムコードの
    
    'フォームB
    Public Class FormB
        Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
            Dim f As New FormC
            f.ShowDialog()
        End Sub
    End Class
    
    'フォームC
    Public Class FormC
        Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
            FormA.TextBox1.Text = "test"
            FormB.TextBox1.Text = "test"
        End Sub
    End Class
    
    
    を
    
    
    'フォームB
    Public Class FormB
        Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
            Dim f As New FormC(Me)
            f.ShowDialog()
        End Sub
    End Class
    
    'フォームC
    Public Class FormC
        Private _formB As FormB
    
        Public Sub New(ByVal form As FormB)
            _formB = form
        End Sub
    
        Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
            FormA.TextBox1.Text = "test"
            _formB.TextBox1.Text = "test"
        End Sub
    End Class
    
    というように、まさるさんに教えていただいたとおりにしてみたのですが、
    コンストラクタの部分で
    
    警告	1	
    デザイナで生成された型 'WindowsApplication1.FormC' の 'Public Sub New(form As FormB)' は 
    InitializeComponent メソッドを呼び出さなければなりません。
    
    と警告が表示されてしまいます。
    
    
    警告なので無視して実行してみるとフォームBからフォームCを表示させた時に正常にフォームCが表示されません。
    ボタンもテキストボックスもない空のフォームが表示されてしまいます。
    
    
    どうすればいいのでしょうか?
記事No.42605 のレス /過去ログ73より / 関連記事表示
削除チェック/

■42688  Re[5]: 別フォームのコントロールのTextが変更できない
□投稿者/ ミク -(2009/10/20(Tue) 11:20:17)
    すみません。
    
    
    
    'フォームC
    Public Class FormC
        Private _formB As FormB
    
        Public Sub New(ByVal form As FormB)
    
            _formB = form
        End Sub
    
        Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
            FormA.TextBox1.Text = "test"
            _formB.TextBox1.Text = "test"
        End Sub
    End Class
    
    を
    
    Public Class FormC
        Private _formB As FormB
    
        Public Sub New(ByVal form As FormB)
            InitializeComponent()
            _formB = form
        End Sub
    
        Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
            FormA.TextBox1.Text = "test"
            _formB.TextBox1.Text = "test"
        End Sub
    End Class
    
    というようにコンストラクタ内でInitializeComponent()を実行することで警告を消すことができました。
    
    
    
    皆さんのおかげで疑問点もすべて解決することができました。
    本当にありがとう御座いました。
    
           
記事No.42605 のレス / END /過去ログ73より / 関連記事表示
削除チェック/

■42703  Re[6]: 別フォームのコントロールのTextが変更できない
□投稿者/ まさる -(2009/10/20(Tue) 13:49:10)
>
    No42688 (ミク さん) に返信
    > Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
    > FormA.TextBox1.Text = "test"
    > _formB.TextBox1.Text = "test"
    > End Sub
    > End Class

    FormAも同じように対応しておかないと、FormA以外をスタートアップフォームにした場合に正常に動作しなくなりますのでご注意ください。
記事No.42605 のレス /過去ログ73より / 関連記事表示
削除チェック/

■42869  Re[7]: 別フォームのコントロールのTextが変更できない
□投稿者/ ミク -(2009/10/22(Thu) 14:38:33)
    何から何までありがとうございました。

    おかげですべて解決できました。
記事No.42605 のレス / END /過去ログ73より / 関連記事表示
削除チェック/



<< 0 >>

パスワード/

- Child Tree -