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

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

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

No.6760 の関連記事表示

<< 0 | 1 >>
■6822  Re[6]: Form2からアプリケーション終了
□投稿者/ chite -(2006/09/25(Mon) 21:56:53)

    分類:[C#] 

    No6820に返信(魔界の仮面弁士さんの記事)
    >

    > 一般的な手順(稲妻アイコン)で行う限りにおいては、上記のような
    > 「static」なメソッドが生成される事はないと思いますが、もしかして、
    > 稲妻アイコンを使わず、上記のメソッド定義を手作業で記述していませんか?

    はい、そうでした。いつもはコントロールもフォームもダブルクリックで
    イベントハンドラを設定してました。

    稲妻を使ってみてこんなに多くのイベントがあるとは吃驚しました。
    おかげさまで思うようにアプリケーションを閉じることができました。
    いつも初歩的なことばかりで、、、すいません。
    皆さんありがとうございました。
記事No.6760 のレス / END /過去ログ6より / 関連記事表示
削除チェック/

■6820  Re[5]: Form2からアプリケーション終了
□投稿者/ 魔界の仮面弁士 -(2006/09/25(Mon) 19:58:32)

    分類:[C#] 

    > これでは何も反応しないのですが、、基本的に大きな問題があるでしょうか?

    イベントハンドラが登録されていないのかも知れませんね。


    > private static void Form2_FormClosing(object sender, FormClosingEventArgs e)

    普段イベント処理を記述するとき、どのような手順で作成していますか?

    一般的な手順(稲妻アイコン)で行う限りにおいては、上記のような
    「static」なメソッドが生成される事はないと思いますが、もしかして、
    稲妻アイコンを使わず、上記のメソッド定義を手作業で記述していませんか?

記事No.6760 のレス /0過去ログ6より / 関連記事表示
削除チェック/

■6819  Re[4]: Form2からアプリケーション終了
□投稿者/ chite -(2006/09/25(Mon) 19:40:24)

    分類:[C#] 

    No6814に返信(επιστημηさんの記事)

    > だからぁ、FormClosedイベントのハンドラでApplication.Exit()してはどうか、と。
    >
    いつもすいません。今色々試してはいるんですがうまく行かないです。

    private static void Form2_FormClosing(object sender, FormClosingEventArgs e)
    {
    Application.Exit();

    }

    これでは何も反応しないのですが、、基本的に大きな問題があるでしょうか?

記事No.6760 のレス /0過去ログ6より / 関連記事表示
削除チェック/

■6814  Re[3]: Form2からアプリケーション終了
□投稿者/ επιστημη -(2006/09/25(Mon) 17:46:20)

    分類:[C#] 

    > 正確には、Form2をボタンで閉じる時はボタンイベントにApplication.Exit();と
    > すれば良いんですが、Form2の「×」で閉じた時はどのような方法で
    > アプリケーションを閉じたら・・・ということでした。

    だからぁ、FormClosedイベントのハンドラでApplication.Exit()してはどうか、と。

記事No.6760 のレス /0過去ログ6より / 関連記事表示
削除チェック/

■6813  Re[2]: Form2からアプリケーション終了
□投稿者/ chite -(2006/09/25(Mon) 17:37:15)

    分類:[C#] 

    No6794に返信(まきなすさんの記事)
    > C#ですよね
    >
    多くの返信いただきありがとうございます。

    すいません。「form2を閉じた時に何らかの方法でFormを閉じる方法」
    などと寝ぼけた事を書いてました。

    正確には、Form2をボタンで閉じる時はボタンイベントにApplication.Exit();と
    すれば良いんですが、Form2の「×」で閉じた時はどのような方法で
    アプリケーションを閉じたら・・・ということでした。

    アドバイス頂いた方法で今から試してみようと思ってますが、具体的な
    形がまだ見えてきてないのでまたよろしくお願いします。
    とりあえずがんばってみます。
記事No.6760 のレス /0過去ログ6より / 関連記事表示
削除チェック/

■6794  Re[7]: Form2からアプリケーション終了
□投稿者/ まきなす -(2006/09/25(Mon) 10:58:25)

    分類:[C#] 

    C#ですよね

    Formが閉じるときのイベントは
    FormClosedかFormClosingでよいのではないでしょうか。
    たとえばFormClosedに
    Application.Exit();
    と書けばForm2が閉じた後にアプリケーションが終了しますね。

    それとは別に
    > Form1の上にForm2を表示するようにしてある場合ですが

    とありますのでForm2はモーダル表示(ShowDialog())なのでしょうか。
    その場合であれば
    from2.ShowDialog();
    の次の行に
    this.Close();
    と書けば良いような気がします。

    はずしていたらごめんなさい。



記事No.6760 のレス /0過去ログ6より / 関連記事表示
削除チェック/

■6792  Re[6]: Form2からアプリケーション終了
□投稿者/ trapemiya -(2006/09/25(Mon) 10:40:10)
>

    分類:[C#] 

    一応、補足しておきますと、.NET 2.0なら、OnFormClosingと、OnFormClosedです。
記事No.6760 のレス /0過去ログ6より / 関連記事表示
削除チェック/

■6788  Re[5]: Form2からアプリケーション終了
□投稿者/ まどか -(2006/09/25(Mon) 09:27:15)

    分類:[C#] 

    有無を言わさず終了したいってのと
    各オブジェクトが感知して終了処理をしたいってのがあると思う。
    どっちだろう?

    > Form2の「×」ボタンを閉じるときのイベント発生法が解らなくて困ってます。
    イベントを拾いたいのか、Xで消える挙動を再現したいのか?
記事No.6760 のレス /0過去ログ6より / 関連記事表示
削除チェック/

■6786  Re[5]: Form2からアプリケーション終了
□投稿者/ επιστημη -(2006/09/25(Mon) 07:31:22)
>

    分類:[C#] 

    No6785に返信(chiteさんの記事)
    > Form2の「×」ボタンを閉じるときのイベント発生法が解らなくて困ってます。

    Formが閉じるときのイベントは何? ってことですか?
    OnClosing/OnClosedなんてのがありますが。

記事No.6760 のレス /0過去ログ6より / 関連記事表示
削除チェック/

■6785  Re[4]: Form2からアプリケーション終了
□投稿者/ chite -(2006/09/25(Mon) 00:24:36)

    分類:[C#] 

    No6769に返信(囚人さんの記事)
    >>
    皆さん返信ありがとうございます。
    実は Application.Exit();を使って終了の確認はしてみたんですが、

    Form2の「×」ボタンを閉じるときのイベント発生法が解らなくて困ってます。
    Formのプロバティにそのようなメソッドを記述できるかな?
    などと素人考えで覗いてみましたが、、無いといより不明です。

    επιστημη さんにいただいたアドバイスでは、Form2を閉じた時に
    何らか方法でFormを閉じる方法はいくつかあるようですが、
    調べてみたんですけど、、なかなか見つからないので、、
    あつかましいのは承知で、、すいませんがお勧めの方法をお願いします。
記事No.6760 のレス /0過去ログ6より / 関連記事表示
削除チェック/

■6769  Re[3]: Form2からアプリケーション終了
□投稿者/ 囚人 -(2006/09/24(Sun) 18:48:18)

    分類:[C#] 

    >
    > ありますねぇ。
    >
    > Application.Exit();
    >

    Environment.Exit();
    なんてのも。Environment.Exit() の方は強制終了に近いのかな。
記事No.6760 のレス /0過去ログ6より / 関連記事表示
削除チェック/

■6768  Re[2]: Form2からアプリケーション終了
□投稿者/ επιστημη -(2006/09/24(Sun) 16:30:20)
>

    分類:[C#] 

    > # クラスApplicationに対して"終われ!"と命じるメソッドがあるんじゃないかしら。

    ありますねぇ。

    Application.Exit();

記事No.6760 のレス /0過去ログ6より / 関連記事表示
削除チェック/

■6764  Re[1]: Form2からアプリケーション終了
□投稿者/ επιστημη -(2006/09/24(Sun) 02:57:16)
>

    分類:[C#] 

    > Form1の上にForm2を表示するようにしてある場合ですが
    > Form2の「×」終了ボタンでForm2を閉じると同時に
    > アプリケーションを終了させたいのですが、このような
    > 事はできるものでしょうか?

    すっごく単純に考えればForm1を閉じればアプリが終了するんだったら、
    Form2が閉じるのと連動してForm1を閉じればよろしいですなぁ。
    てことは、Form2が閉じたことをなんとかしてForm1に教えてあげればいい。

    # もちろん他にもやりかたはあるでしょうよ。
    # クラスApplicationに対して"終われ!"と命じるメソッドがあるんじゃないかしら。

記事No.6760 のレス /0過去ログ6より / 関連記事表示
削除チェック/

■6760  Form2からアプリケーション終了
□投稿者/ chite -(2006/09/24(Sun) 01:18:29)

    分類:[C#] 


    分類:[C#] 

    お世話になります。

    またまた初歩的な質問ですいません。

    Form1の上にForm2を表示するようにしてある場合ですが
    Form2の「×」終了ボタンでForm2を閉じると同時に
    アプリケーションを終了させたいのですが、このような
    事はできるものでしょうか?
親記事 /0過去ログ6より / 関連記事表示
削除チェック/

■6760  別スレッドでShowDialogしたフォームのクローズ
□投稿者/ 困ったちゃん -(2007/08/23(Thu) 12:57:42)

    分類:[VB.NET/VB2005] 

    お尋ねします。
    メインフォームForm1から別スレッドで経過表示用フォームForm2をShowDialog表示する下記のコードで、
    書き込み処理中にForm2のクローズボックスをクリックすると、Invokeのところで凍りついてしまいます。
    どこに問題があるのでしょうか。
    開発環境・使用言語はVB2003/Framework1.1です。

    '/*** Form1 (メインフォーム) ***/
    Public Class Form1 : Inherits System.Windows.Forms.Form
    '// Friend WithEvents Button1 As System.Windows.Forms.Button
    '// Friend WithEvents Button2 As System.Windows.Forms.Button
    Private fm2 As Form2

    '// Button1.Click : Form2を別スレッドで開く
    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
    If fm2 Is Nothing Then
    Dim t As New System.Threading.Thread(AddressOf Me.ShowForm2)
    t.Start()
    End If
    End Sub

    '// Form2を開くためのプロシージャ
    Private Sub ShowForm2()
    fm2 = New Form2
    fm2.ShowDialog()
    fm2.Dispose()
    fm2 = Nothing
    End Sub

    '// Button2.Click : 経過記録を表示しながら行う繰り返し処理
    Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click
    Me.Button2.Enabled = False
    For i As Integer = 1 To 1000
    Me.WriteLine(i.ToString() & "巡目です。")
    Next
    Me.Button2.Enabled = True
    End Sub

    '// Form2に1行表示
    Private Sub WriteLine(ByVal text As String)
    If fm2 Is Nothing Then Return
    Try
    fm2.WriteLine(text)
    Catch ex As System.ObjectDisposedException
    End Try
    End Sub
    End Class

    '/*** Form2 (経過表示用フォーム) ***/
    Public Class Form2 : Inherits System.Windows.Forms.Form
    '// Friend WithEvents RichTextBox1 As System.Windows.Forms.RichTextBox
    Private Delegate Sub WriteLineDelegate(ByVal text As String)
    Private dlgt As New WriteLineDelegate(AddressOf Me.WriteLine)

    '// リッチテキストボックスに文字を追記表示する
    Public Sub WriteLine(ByVal text As String)
    If Me.IsDisposed OrElse Not Me.IsHandleCreated Then Return
    If Me.InvokeRequired Then
    Me.Invoke(dlgt, New Object() {text}) '// ここで凍りつく
    Else
    With Me.RichTextBox1
    .AppendText(text & vbCrLf)
    .ScrollToCaret()
    .Focus()
    End With
    End If
    End Sub
    End Class


    なお、Form1.ShowForm2の fm2.Dispose() : fm2 = Nothing を外しても状況は変わりませんでした。
親記事 /過去ログ17より / 関連記事表示
削除チェック/

■6772  Re[1]: 別スレッドでShowDialogしたフォームのクローズ
□投稿者/ まどか -(2007/08/23(Thu) 16:39:03)
    fm2は別スレッドで作成したのだから

    > '// Form2に1行表示
    > Private Sub WriteLine(ByVal text As String)
    > If fm2 Is Nothing Then Return
    > Try
    > fm2.WriteLine(text)
    > Catch ex As System.ObjectDisposedException
    > End Try
    > End Sub

    これこそInvokeする必要があるのでは。

    逆に

    > '// リッチテキストボックスに文字を追記表示する
    > Public Sub WriteLine(ByVal text As String)
    > If Me.IsDisposed OrElse Not Me.IsHandleCreated Then Return
    > If Me.InvokeRequired Then
    > Me.Invoke(dlgt, New Object() {text}) '// ここで凍りつく
    > Else
    > With Me.RichTextBox1
    > .AppendText(text & vbCrLf)
    > .ScrollToCaret()
    > .Focus()
    > End With
    > End If
    > End Sub

    こっちは自分自身の操作だからInvokeは要らないのでは。
記事No.6760 のレス /過去ログ17より / 関連記事表示
削除チェック/

■6774  Re[2]: 別スレッドでShowDialogしたフォームのクローズ
□投稿者/ 困ったちゃん -(2007/08/23(Thu) 17:43:28)
    No6772 (まどか さん) に返信
    
    アドバイスありがとうございます。
    
    Form1側のWriteLineを
    
    '/*** Form1 (メインフォーム) ***/
    
        Private Delegate Sub WriteLineDelegate(ByVal text As String)
        Private dlgt As New WriteLineDelegate(AddressOf Me.WriteLine)
    
        '// Form2に1行表示
        Private Sub WriteLine(ByVal text As String)
            If fm2 Is Nothing Then Return
            If fm2.IsDisposed OrElse Not fm2.IsHandleCreated Then Return
            Try
                If fm2.InvokeRequired Then
                    fm2.Invoke(dlgt, New Object() {text})   '// ここで凍りつく
                Else
                    fm2.WriteLine(text)
                End If
            Catch
            End Try
        End Sub
    
    と改め、かつForm2側のWriteLineを
    
    '/*** Form2 (経過表示用フォーム) ***/
    
        '// リッチテキストボックスに文字を追記表示する
        Public Sub WriteLine(ByVal text As String)
            With Me.RichTextBox1
                .AppendText(text & vbCrLf)
                .ScrollToCaret()
                .Focus()
            End With
        End Sub
    
    としたコードでも、If分岐が移っただけなので、やはり fm2.Invoke のところで凍りついてしまいます。
    ご指摘いただいた意図と食い違っていますでしょうか?
    
記事No.6760 のレス /過去ログ17より / 関連記事表示
削除チェック/

■6779  Re[3]: 別スレッドでShowDialogしたフォームのクローズ
□投稿者/ 困ったちゃん -(2007/08/23(Thu) 18:31:56)
    すみません。Form1.WriteLine では fm2.InvokeRequired を検査する意味がありませんでした。単純に;
    
    '/*** Form1 (メインフォーム) ***/
    
        Private Delegate Sub WriteLineDelegate(ByVal text As String)
    
        '// Form2に1行表示
        Private Sub WriteLine(ByVal text As String)
            If fm2 Is Nothing Then Return
            If fm2.IsDisposed OrElse Not fm2.IsHandleCreated Then Return
            Try
                Dim dlgt As New WriteLineDelegate(AddressOf fm2.WriteLine)
                fm2.Invoke(dlgt, New Object() {text})
            Catch
            End Try
        End Sub
    
    としてみましたが、やはり結果は同じでした。
記事No.6760 のレス /過去ログ17より / 関連記事表示
削除チェック/

■6791  Re[4]: 別スレッドでShowDialogしたフォームのクローズ
□投稿者/ まどか -(2007/08/23(Thu) 21:03:36)
    まぁあてずっぽで言うと、モーダルが原因かも。
    モードレスでインスタンスが生きている間Sleepループかけたらうまくいくかもしれません。
    #予想ですいません

    というか本来言いたいことはそうではなくて
    普通は時間のかかる「処理」を別スレッド化して、GUIメインスレッドは通常の入力待ち状態(普通にフォームが表示されている状態)にさせます。
    で、スレッドからの通知を受けて表示を更新します。

    下記にて、まずはやろうとしていることとの違いというか一般的な形を試してみるとよいと思います。

    http://dobon.net/vb/
    Tips − その他のTips − 「時間のかかる〜」サンプル
記事No.6760 のレス /過去ログ17より / 関連記事表示
削除チェック/

■6793  Re[5]: 別スレッドでShowDialogしたフォームのクローズ
□投稿者/ れい -(2007/08/23(Thu) 21:20:57)
    2007/08/23(Thu) 21:23:57 編集(投稿者)
    2007/08/23(Thu) 21:22:42 編集(投稿者)

    No6772 (まどか さん) に返信
    > fm2は別スレッドで作成したのだから
    >> '// Form2に1行表示
    >> Private Sub WriteLine(ByVal text As String)
    > これこそInvokeする必要があるのでは。
    >> '// リッチテキストボックスに文字を追記表示する
    >> Public Sub WriteLine(ByVal text As String)
    > こっちは自分自身の操作だからInvokeは要らないのでは。

    そんなことはないですよ。
    Formのメンバを呼ぶときに作成元スレッドであればいいので、
    WriteLineでチェックするやり方もアリです。
    そのほうが綺麗になる場合が多い。

    No6760 (困ったちゃん さん) に返信
    > 書き込み処理中にForm2のクローズボックスをクリックすると、Invokeのところで凍りついてしまいます。
    > どこに問題があるのでしょうか。

    フォームが閉じて作成元スレッドはメッセージを読みにいかなくなるのに
    他のスレッドがInvokeでメッセージを送り、完了を待つからです。

    No6791 (まどか さん) に返信
    > というか本来言いたいことはそうではなくて
    > 普通は時間のかかる「処理」を別スレッド化して、GUIメインスレッドは通常の入力待ち状態(普通にフォームが表示されている状態)にさせます。
    > で、スレッドからの通知を受けて表示を更新します。
    > 下記にて、まずはやろうとしていることとの違いというか一般的な形を試してみるとよいと思います。

    まどかさんのおっしゃるように、
    GUIはGUIスレッドに、処理は処理用のスレッドに、というのが普通です。
    ですが、コンポーネント化などの都合で、違う方法をとることもあります。
    今回のようなパターンも、有効な場合もあります。

    Invokeではなく、
    BeginInvokeにすれば完了を待たないので解決するかと思います。
    また、その方がパフォーマンスも優れているはずです。
    WriteLineしてる間処理ができないのはもったいないですから。

    注意点は、
    BeginInvokeだと完了を待たないので戻り値を取得できませんし、
    Invoke先がきちんと完了したかわかりません。
    また、前回の完了もわからないので、
    たくさん呼ぶとキューにたくさん溜まります。
    メッセージキューを使ってるので、あまりたくさん溜められません。
記事No.6760 のレス /過去ログ17より / 関連記事表示
削除チェック/

次の20件>

<< 0 | 1 >>

パスワード/

- Child Tree -