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

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

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

No.57208 の関連記事表示

<< 0 >>
■57208  ShowDialogでのErrorについてお教え下さい
□投稿者/ ミネ -(2011/02/17(Thu) 12:44:55)
>

    分類:[.NET 全般] 

    VisualStudio2005(VB)でProgramを作成しています。 
    DFile(DataFile)幾つかを作成しそのデータをfrmDataRW.showdialogで呼び出して
    利用しています。 
    DFileを変更したい場合はfrmDataRWにはcmdDFileChangeがありこれをClickすれば
    frmDataRW.Hideの後にfrmDFileSeltがshowdialogされここでDFileが変更出来ます。

    frmDataRW:
    '*************************************************************************************
    ' Sub cmdDFileChange_Click
    ' データファイル変更が入力されたら
    '*************************************************************************************
    Private Sub cmdDFileChange_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles cmdDFileChange.Click
    flgDFileChange = True
    Me.Hide
    frmDFileSet.ShowDialog()
    End Sub
      
      frmDFileSelt:
    OptionButtonでどのDFileを使うかを指定しています。
       例えば
         Case 3 '(OptionButton 3)
    'サンプルデータファイルの使用
    DFile = stCurrentDir & "\DataFile\SD_Sample.dat"
    lblDataFileName.Text = DFile
    frmDataRW.lblDataFileName.Text = DFile
    Me.Hide()        'AAA
    Try
    frmDataRW.ShowDialog()    'BBB
    Catch ex As Exception
    MsgBox(ex.Message)      'CCC
    End Try
    この変更後にFrmDFileSelect.Hideし('AAA)再度このDFileでfrmDataRW.showdialog('BBB)しようとしますと
    ('CCC)で「System.InvalidOperationException' の初回例外が System.Windows.Forms.dll で発生しました。」
    「既に表示されているフォームをモーダル ダイアログ ボックスとして表示できません。
    showDialog を呼び出す前に、フォームの Visible プロパティを false にしてください」
    とErrorになります。
    一旦frmDataRW.Hideとしているのになぜこの様なErrorになるのでしょうか?
    何方か解決方法をお教え下さい。 よろしくお願い申し上げます。
親記事 /過去ログ96より / 関連記事表示
削除チェック/

■57210  Re[1]: ShowDialogでのErrorについてお教え下さい
□投稿者/ shu -(2011/02/17(Thu) 13:00:11)
    No57208 (ミネ さん) に返信

    Formのownerを変更してShowDialogをすることは出来ません。
    ShowDialogを最初に行ったところからShowDialogするかDisposeして破棄するか
    しないといけないです。
記事No.57208 のレス /過去ログ96より / 関連記事表示
削除チェック/

■57215  Re[2]: ShowDialogでのErrorについてお教え下さい
□投稿者/ ミネ -(2011/02/17(Thu) 14:21:54)
>
    No57210 (shu さん) に返信
    > ■No57208 (ミネ さん) に返信
    >
    > Formのownerを変更してShowDialogをすることは出来ません。
    > ShowDialogを最初に行ったところからShowDialogするかDisposeして破棄するか
    > しないといけないです。

    早速多数の方から御指導有り難う御座いました。
    sueさんのご指導に従い
    Sub cmdDFileChange_Clickの me.Hide を
    me.dispose に替えるだけで解決しました。
    me.Closeはなめしてみたがダメでした。
    me.disposeで解決出来ることが判り本当に助かりました。
    ご指導頂いた皆様に心から御礼申し上げます。
記事No.57208 のレス /過去ログ96より / 関連記事表示
削除チェック/

■57209  Re[1]: ShowDialogでのErrorについてお教え下さい
□投稿者/ じゃんぬねっと -(2011/02/17(Thu) 12:56:10)
>
    No57208 (ミネ さん) に返信
    > 一旦frmDataRW.Hideとしているのになぜこの様なErrorになるのでしょうか?
    > 何方か解決方法をお教え下さい。 よろしくお願い申し上げます。

    ダイアログだからとしか表現しようがありません。
    frmDataRW が非表示となって残っているなら ShowDialog メソッドを使わずに表示すれば良いと思いますが、
    frmDataRW は毎回 Close して毎回作成した方がフツーかなぁと。

    Using frmDataRW As New frmDataRW()
      frmDataRW.ShowDialog()
    End Using
記事No.57208 のレス /過去ログ96より / 関連記事表示
削除チェック/

■57211  Re[2]: ShowDialogでのErrorについてお教え下さい
□投稿者/ マサヤ -(2011/02/17(Thu) 13:03:57)
    HideしたらShowできるのでは、ということだと思いますが、Closeでいいのではないでしょうか?
    そして開くときはまたFormのインスタンスを生成して下さい。
    CloseしないでHideで隠す意味はないのですよね?
記事No.57208 のレス /過去ログ96より / 関連記事表示
削除チェック/

■57213  Re[1]: ShowDialogでのErrorについてお教え下さい
□投稿者/ 魔界の仮面弁士 -(2011/02/17(Thu) 13:49:14)
    'メインフォーム
    Private Sub …
     frmDFileSet.ShowDialog()  'Show でも可
    End Sub
    
    'frmDataRW
    Private Sub …              '1
     Me.Hide()                 '2
     frmDFileSet.ShowDialog()  '3   frmDFileSet が閉じるまで待機
    End Sub                     '4
    
    'frmDFileSelt
    Private Sub …              '5
     Me.Hide()                 '6
     frmDataRW.ShowDialog()    '7   frmDataRW が閉じるまで待機
    End Sub                     '8
    
    
    これらの処理において、4 の行に到達するタイミングというのは、
    6 が実行された後ではなく、8 が実行された後です。
    
    また、8 の行に到達するタイミングというのは、
    2 が実行された後ではなく、4 が実行された後です。
    
    結局、互いが互いを待ち合わせている状態のままなので、この状態では
    4 や 8 には到達しません(Hide を Close にしても同様です)。
    ゆえにフォームが消えても、まだモーダル状態として管理されたままとなります。
    
    4 や 8 の箇所にブレークポイントを貼って、テストしてみてください。
    
    
    > なぜこの様なErrorになるのでしょうか?
    Timer などを使って、Hide を呼び出したメソッドの実行が終わった後で
    ShowDialog するようにすれば一応は回避できますが、そもそもは
    画面遷移の制御構造を見直すべきかと思いますよ。
    
    frmDataRW / frmDFileSelt を排他的に ShowDialog すること自体は
    構わないと思いますが、それを ShowDialog を互いに呼びあう形で
    実装してしまうと、今回のような問題に見舞われる事になります。
    
    
    そもそも、ShowDialog (≠Show) で呼び出したフォームというのは、
    最後に Dispose メソッドで破棄する必要があります。しかし今回のように
    互いを呼び出すようなコードにしてしまうと、いつ Dispose すれば良いのか
    管理しにくくなってしまいますよね。
    
    
    > frmDataRW.lblDataFileName.Text = DFile
    他のフォームのコントロールを直接操作しようとするのではなく、
    データ受け渡し用のメンバーを用意するようにした方が良いですよ。
記事No.57208 のレス /過去ログ96より / 関連記事表示
削除チェック/



<< 0 >>

パスワード/

- Child Tree -