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

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

C# と VB.NET の入門サイト

Re[1]: クラスにあるメッセージを表示するには?


(過去ログ 120 を表示中)

[トピック内 12 記事 (1 - 12 表示)]  << 0 >>

■70193 / inTopicNo.1)  クラスにあるメッセージを表示するには?
  
□投稿者/ MH4 (1回)-(2014/02/28(Fri) 09:34:20)

分類:[VB.NET/VB2005 以降] 

Public Class Form1

Private Sub From1_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles MyBase.Load
    :
 省略
:

Call From_ShowInfo("**  プログラム開始 **")

End Sub

Public Sub From_ShowInfo(ByVal strInfoText As String, Optional ByVal blnClear As Boolean = False)

Try
If blnClear = True Then
Me.TextBox.Text = String.Empty
End If

Me.TextBox.AppendText(vbCrLf & strInfoText)
Me.Refresh()

Catch ex As Exception
Me.TextBox.Text = String.Empty

End Try

End Sub

End Class



Public Class Class1

Public Sub Main

Dim frm As New Form1
:
 省略
:

Call frm.From_ShowInfo("**  処理開始 **")

End Sub

End Class


クラスにあるメッセージをフォームにあるテキストボックスに表示しようとしていますが、
フォームにある「**  プログラム開始 **」は表示されますが、
クラスにある「**  処理開始 **」は表示されません。

メッセージ処理は、全てフォーム側でやらなければならないのでしょうか?






引用返信 編集キー/
■70194 / inTopicNo.2)  Re[1]: クラスにあるメッセージを表示するには?
□投稿者/ kiku (25回)-(2014/02/28(Fri) 09:49:20)
Public Class Class1
  Public Sub Main
    Dim frm As New Form1
    frm.ShowDialog
    Call frm.From_ShowInfo("**  処理開始 **")
  End Sub
End Class

例えば省略されている箇所が上記のように
モーダルダイヤログボックスを表示するようになっていた場合、
「処理開始」はダイヤログボックスのウインドウが非表示になってから
実行されます。実行されはしますが、すでにウインドウがないために
表示されないと認識されているのではないかと思われます。

間違っていたらすみません。

引用返信 編集キー/
■70196 / inTopicNo.3)  Re[2]: クラスにあるメッセージを表示するには?
□投稿者/ MH4 (2回)-(2014/02/28(Fri) 09:57:25)
No70194 (kiku さん) に返信
> 例えば省略されている箇所が上記のように
> モーダルダイヤログボックスを表示するようになっていた場合、
> 「処理開始」はダイヤログボックスのウインドウが非表示になってから
> 実行されます。実行されはしますが、すでにウインドウがないために
> 表示されないと認識されているのではないかと思われます。

モーダルダイヤログボックスは、表示されません
DBに接続して、DBの内容を表示する様になっています。


よろしくお願いします。

引用返信 編集キー/
■70197 / inTopicNo.4)  Re[3]: クラスにあるメッセージを表示するには?
□投稿者/ kiku (27回)-(2014/02/28(Fri) 10:04:11)
> モーダルダイヤログボックスは、表示されません
> DBに接続して、DBの内容を表示する様になっています。

frmはどこで表示開始していますか?
引用返信 編集キー/
■70198 / inTopicNo.5)  Re[4]: クラスにあるメッセージを表示するには?
□投稿者/ MH4 (3回)-(2014/02/28(Fri) 10:27:45)
No70197 (kiku さん) に返信
>>モーダルダイヤログボックスは、表示されません
>>DBに接続して、DBの内容を表示する様になっています。
>
> frmはどこで表示開始していますか?

frm.Show()
をすると、画面数が増えてしまうので表示開始はしていません。
やはり、表示開始しないと駄目なのでしょうか


よろしくお願いします。


引用返信 編集キー/
■70199 / inTopicNo.6)  Re[1]: クラスにあるメッセージを表示するには?
□投稿者/ shu (495回)-(2014/02/28(Fri) 10:52:08)
No70193 (MH4 さん) に返信

ShowDialogだとそこで待ち状態になるので
その後に記述されている処理は画面を閉じないと処理されません。

処理内容にもよりますが
Form1にイベントを作成して
Class1側でそのイベントを受けて処理開始のテキストを設定する必要があります。

省略とかかれている部分のコードが重要な気がします。


> frm.Show()
> をすると、画面数が増えてしまうので表示開始はしていません。
frmをPrivate変数にしてインスタンス作成済なら作成しないようにすれば
この動きは回避出来ます。ShowDialogではなくShowにしてもよいのであれば
Showした後の処理が流れます。
引用返信 編集キー/
■70204 / inTopicNo.7)  Re[5]: クラスにあるメッセージを表示するには?
□投稿者/ kiku (28回)-(2014/02/28(Fri) 14:32:03)
> frm.Show()
> をすると、画面数が増えてしまうので表示開始はしていません。
> やはり、表示開始しないと駄目なのでしょうか

上記文面からは、frmはすでに表示しているので、
新たに表示していませんと読み取れました。

では最初に表示しているのはどこか?
ということが私の質問になります。

shuさんも指摘されていますが、省略されているコードが
重要になるかと思われます。
引用返信 編集キー/
■70205 / inTopicNo.8)  Re[2]: クラスにあるメッセージを表示するには?
□投稿者/ PANG2 (24回)-(2014/02/28(Fri) 14:53:38)
Form1はスタートアップフォームなので、起動時に表示されて

Public Sub Main
Dim frm As New Form1
Call frm.From_ShowInfo("**  処理開始 **")
End Sub

を実行しても反応しないということ?
引用返信 編集キー/
■70207 / inTopicNo.9)  Re[2]: クラスにあるメッセージを表示するには?
□投稿者/ MH4 (4回)-(2014/02/28(Fri) 15:06:31)
No70199 (shu さん) に返信
> 処理内容にもよりますが
> Form1にイベントを作成して
> Class1側でそのイベントを受けて処理開始のテキストを設定する必要があります。

この部分が抜けているとおもいますが、「イベントを受けて処理開始のテキストを設定する」の
やり方が解りません。 すいません


> 省略とかかれている部分のコードが重要な気がします。

From1の方は、初期設定です。
Class1側は、DBの接続関係のソースですので、直接関係はないと思います。


よろしくお願いします

引用返信 編集キー/
■70208 / inTopicNo.10)  Re[3]: クラスにあるメッセージを表示するには?
□投稿者/ shu (497回)-(2014/02/28(Fri) 15:25:17)
No70207 (MH4 さん) に返信

> From1の方は、初期設定です。
> Class1側は、DBの接続関係のソースですので、直接関係はないと思います。

とりあえず起動からForm1がどのように表示されて、Class1の Mainはどの
タイミングで呼ばれるのか説明をつけて下さい。

引用返信 編集キー/
■70209 / inTopicNo.11)  Re[3]: クラスにあるメッセージを表示するには?
□投稿者/ たーん (1回)-(2014/02/28(Fri) 15:56:11)
デフォルトで開始されるフォームと、Class1で作成しているfrmが
別物だということは理解していますか?

Dim frm As New Form1

のあとに、frm.Show
を実行してみてください。
新しく表示された方のフォームに「処理開始」が表示されるんではないかと思います。

引用返信 編集キー/
■70258 / inTopicNo.12)  Re[1]: クラスにあるメッセージを表示するには?
□投稿者/ Jitta (135回)-(2014/03/04(Tue) 21:45:54)
No70193 (MH4 さん) に返信
 普通、「クラスにあるメッセージ」をフォームに表示するために、クラスがフォームに働きかけることはしません。
フォームが、クラスからデータを取得します。

×
Class Class1
    Public Sub Hoge
        ' クラスがフォームに働きかける
        Form1.ShowMessage("メッセージ")
    End Sub
End Class

○
Class Class1
    Public Function Hoge As String
        Return "メッセージ"
    End Function
End Class

Public Class Form1 Inherits Form
    Private Sub Hoge
        ' フォームがクラスからメッセージを取得する
        Dim data As Class1 = New Class1()
        Me.Text = data.Hoge
    End Sub
End Class

○
Public Class Form1 Inherits Form
    Private Sub Hoge
        Dim data As Class1 = New Class1()
        ' フォームから、表示するための手段を通知する
        data.Hoge(Me.Display)
    End Sub

    Private Sub Display(ByVal status As String)
        Me.Text = status
    End Sub
End Class

Class Class1
    Public Sub Hoge(ByVal DisplayText As Action(String))
        DisplayText("メッセージ")
    End Sub
End Class


 それとは別に、もっと根本的な誤りがあるように思います。
Visual Studio 2010 で VB の WindowsForms アプリケーションを作成してみましたが、
エントリポイントが見つかりませんでした。どぼんさんのページによると、コンパイラが自動生成するようです。*1
では、ここにある、Class1 クラスの Main メソッドは、いったい何なのでしょう?
同ページには、自分でエントリポイントを作る場合も書いてありますが、
そこにある必要な情報が、このコードに書いてあるのかどうか分かりません。
あなたは「Class1側は、DBの接続関係のソースですので、直接関係はないと思います。」と判断されていますが、
私は関係ありと判断します。
あるいは、実行されると思っているだけで、本当は実行されていないメソッドなのではないでしょうか。

 Class1.Main がエントリポイントであるなら、Application.Run が必要です。
次のようにコードが書かれているなら、「処理開始」が表示されるはずはありません。

Public Class Class1
    Public Sub Main
        Dim frm As New Form1
        :
        省略
        :

        Application.Run(frm)
        ' フォームを閉じた後に実行される
        Call frm.From_ShowInfo("**  処理開始 **")
    End Sub
End Class


 要らない情報を捨てることはできますが、必要な情報作り出すことはできません。
あなたが情報の要不要を判断しないでください。それを判断するのは、答える側です。

*1 http://dobon.net/vb/dotnet/programing/makeentrypoint.html

引用返信 編集キー/


トピック内ページ移動 / << 0 >>

このトピックに書きこむ

過去ログには書き込み不可

管理者用

- Child Tree -