• ベストアンサー

vb2005でUDP受信時にフォームが表示されない

はじめまして VB2005でUDPのメッセージを受信してForm上のLabelに受信内容を表示させるサンプルプログラムを作成したのですが、「デバック開始」をクリックしてもFormのウィンドウ自体が表示されません。 イミディエイトにdebug.printで受信データは表示されていますのでプログラム自体は正常に動作しているようです。 どなたかアドバイスをいただけませんでしょうか。 Public Class Form1 Dim localport As Integer = 1111 Private Sub Form1_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load '文字コードを指定する Dim enc As System.Text.Encoding = System.Text.Encoding.UTF8 ' バインド Dim udp As New System.Net.Sockets.UdpClient(localport) ' 受信 Dim remoteEP As System.Net.IPEndPoint = Nothing Debug.Print("受信開始") Do My.Application.DoEvents() Dim rcvBytes As Byte() = udp.Receive(remoteEP) Dim rcvMsg As String = enc.GetString(rcvBytes) My.Application.DoEvents() Debug.Print("受信メッセージ:" & rcvMsg) Label1.Text = rcvMsg Loop End Sub End Class

質問者が選んだベストアンサー

  • ベストアンサー
  • redfox63
  • ベストアンサー率71% (1325/1856)
回答No.1

Formが表示されるのは Loadイベントを抜けた後になります Loadイベント中に Do ... Loop で無限ループを作っているので .NET Frameworkがフォームを表示することはありません フォームを表示するのであればループに入る前に Me.Show() などを実行しましょう 本来なら ボタンなどを準備してそのクリックイベントなどを使うようにしたほうがいいと思います

koto-44
質問者

お礼

redfox63様 早々のご回答ありがとうございます。 なるほど、そういうことですか....お恥ずかしい ということは、以下のような方法が考えられますでしょうか。 ・フォームのロードでやるならば、ループの前にme.show()を実行する ・ボタンなどをつけて、ボタンクリック後にループで受信する どちらも、これから確認してみます。 ありがとうございました。

全文を見る
すると、全ての回答が全文表示されます。

その他の回答 (1)

回答No.2

既に答えは出ているようですが、補足を。 VB2005なら、FormのShownイベントで実際に表示する処理を書くって手も 使えますよ。 ちなみに.NETでも、2003までのバージョンにはShownイベントは無いようです。

koto-44
質問者

お礼

K-Sogacchi様 ありがとうございます。 現在のところTimerコントロールで200msにイベントを発生させ、 受信データの有無をチェックするようにいたしました。 以下、ソースの抜粋です。 Public Class Form1  Dim listenport As Integer = 1111  Dim listner As New Sockets.UdpClient(listenport)  Dim EP As New IPEndPoint(IPAddress.Any, listenport)  Dim bytes As Byte()  Dim rcvmsg As String  Private Sub Timer1_Tick(ByVal sender As Object, ByVal e As System.EventArgs) Handles Timer1.Tick   If listner.Available > 0 Then    ' UDP受信データあり    bytes = listner.Receive(EP)    rcvmsg = Encoding.ASCII.GetString(bytes, 0, bytes.Length)    Debug.Print("受信メッセージ:" & rcvmsg)      :

全文を見る
すると、全ての回答が全文表示されます。

関連するQ&A

  • VB、教えてください。

    VB、教えてください。 5つのラベルが縦に並んでいます。 label0 label1 label2 label3 label4 あらかじめ、 Dim m as integer=0 を宣言し、 どうにかして "label"という文字列とmという数字をくっつけ、 label0 label1… という風にできないでしょうか。 そして label"m".text=10*m というような表示を作りたいのですが。 下記のようなイメージです。分かりにくかったらごめんなさい。 Public Class Form1 Dim m As Integer = 0 Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click lblmessage(+("m").Text = 10*m m = m + 1 End Sub End Class

  • VBで倍数を出したい

    VBで倍数を出したい よろしくお願いします。 おそらく基本なんだと思うのですが、さっぱりわかりません。 TextBox Label Buttonと並んでいて、 TextBoxに入った整数に対し、 Buttonを1度押すたびに、 Labelに倍数が表記されていく、 という趣旨なのですが。 まず、前段階として下記を作らされました。 Public Class Form1 Dim i As Integer Dim m As Integer Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click i = TextBox1.Text lblmessage.Text = i + m m = lblmessage.Text End Sub End Class このように、labelの数字がどんどん変わっていくのはできたのですが、問題は、 Text…10 Label…10    20    30    40    50    60    70    80    90    100 となり、しかも一度に出るのではなく、Buttonひと押しにつき一つの解が出ね 次の一押しで改行され解が出る。 かつ、100で打ち止めにすること…だそうです。 いちおうめちゃくちゃですが、みんな風に作りました。 Public Class Form1 Dim a As Integer Dim b As Integer Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click Dim b As Integer = 10 a = TextBox1.Text lblMessage.Text = a & ControlChars.CrLf & a + b End Sub End Class どうかヒントだけでもお願いします。

  • VB2008 Form間の計算について

    VB勉強中のものです。 次のようにプログラムを作成したいですので よろしくお願いします。 要望: 1 From2のTextbox1 or Textbox2に"2001/05/05"ような書式で日付を入力 2 RadioButton1かRadioButton2の選択して 3 Form1の「DateTimePicker」を利用して、日数の差を計算し、 Form2の label3に結果を表示させる 例: From2のTextbox1 = 2001/01/01 Form1の「DateTimePicker」 = 2002/01/01 RadioButton1を選択したら、 Label3内に " 誕生日から生まれて365日となりました" という結果が出れば、問題がないです。 ------------ Form 1 --------------------- Public Class Form1 Private Sub Label2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Label2.Click 'labelをクリックして、form2を開く Dim frmTmp As New Form2 frmTmp.ShowDialog() End Sub Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click Dim intdate As Integer intdate = DateDiff(DateInterval.Day, DateTimePicker1.Value, Now) Label1.Text = "誕生日から生まれて" & intdate & "日となりました" End Sub End Class -------------------------------------------- -------------Form 2 ------------------------ Public Class Form2 Private Sub RadioButton1_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles RadioButton1.CheckedChanged If RadioButton1.Checked = True Then Label3.Text = "*******わからない部分*******" End If End Sub End Class ----------------------------------------------------- 以上

  • VBでの質問です

    VBでの質問です 5分を計るタイマーを作っていて5分たつと止まるプログラムを作っていて、コンマ以下のケタが長くて、しかも止まらない( Label1.Text = n5.Subtract(Now).ToStringをLabel1.Text = n5.Subtract(Now).TotalMinutesにしてIf Label1.Text = "00:00:00" ThenをIf Label1.Text = "0" Thenにした時は止まりました)ので止まるようにするにはどこを変えればいいですか? 教えてください 以下コードです Public Class Form1 Dim n5 As DatePrivate Sub Form1_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load n5 = Now.AddMinutes(5) Timer1.Interval = 1000 Timer1.Start() End Sub Private Sub Timer1_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Timer1.Tick Label1.Text = n5.Subtract(Now).ToString If Label1.Text = "00:00:00" Then MsgBox("時間になりました。") Timer1.Stop() End If End Sub 長文ですいません

  • VB.NET 動的コントロールのインデックス

    VB.NET 2005で動的コントロールを複数作成し、 クリックされた動的コントロールのインデックスを 調べる方法はないでしょうか? 以下の様に動的コントロールLabel01とLabel02が複数並んでいて Label01(3)をクリックした時に、Label02(3)も同時に処理 したいのでインデックスを調べたいのですが方法がわかりません。 [Label01(1)] [Label02(1)] [Label01(2)] [Label02(2)] [Label01(3)] [Label02(3)] [Label01(4)] [Label02(4)] [Label01(5)] [Label02(5)]    :      : [Label01(x)] [Label02(x)] '----------------------------------------------- 'Label01(3)がクリックされたら、Label02(3)も"ok"を表示する Private Sub Lab01_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Dim lab01 As Label = CType(sender, Label) System.Diagnostics.Debug.WriteLine(lab01.Text & "が押されました。") lab01.Text = "ok" lab02(?).Text = "ok"  '←インデックスがわかりません End Sub '-----------------------------------------------

  • MDIParent1に、ToolStripButton1とLabel1

    MDIParent1に、ToolStripButton1とLabel1、Label2を 配置しています。 やりたいことは  (1)ToolStripButton1をクリックしてForm1を表示させる。  (2)Label1をクリックしてForm1のTextをLabel1のTextに変更する。  (3)Label2をクリックしてForm1のTextをLabel2のTextに変更する。 最初に表示させたForm1のTextのみを変更させる。 現在下記のプログラムを実行したのですが Label1をクリックすると新たにForm1が表示されてしまいます。 (Form1のTextはLabel1のTextに変更されている) Label2をクリックすると新たにForm1が表示されてしまいます。 (Form1のTextはLabel2のTextに変更されている) クリックする毎にForm1がふえていきます。 対策方法を教えてください。 Public Class MDIParent1 Dim F1 As Form1  Private Sub ToolStripButton1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles ToolStripButton1.Click Dim frm As New Form1 frm.MdiParent = Me frm.Show() End Sub   Private Sub Label1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Label1.Click F1 = New Form1 F1.Visible = True F1.Text = Label1.Text Label1.BorderStyle = BorderStyle.Fixed3D Label2.BorderStyle = BorderStyle.None End Sub   Private Sub Label2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Label2.Click F1 = New Form1 F1.Visible = True F1.Text = Label2.Text Label2.BorderStyle = BorderStyle.Fixed3D Label1.BorderStyle = BorderStyle.None End Sub End Class

  • VB.NET スレッドからのイベント受信について

    はじめて質問させていただく、VB.NET初心者です。 ただいまスレッド、イベント処理を作成中で Form1にButton1、Label1を貼り付け以下の様なプログラムを記述しました。 (スレッドにて5秒ごとにイベントを発生させます。) 'イベント引数 Public Class EventArgs Inherits System.EventArgs Public nowTime As String End Class 'イベント発行 Public Class EventTest Public Event _event(ByVal sender As Object, ByVal e As EventArgs) Public Sub Go() Dim args As New EventArgs() args.nowTime = Now.ToString RaiseEvent _event(Me, args) End Sub End Class 'フォーム内処理 'スレッド宣言 Dim MyThread As New System.Threading.Thread(AddressOf _Thread) Private WithEvents _test As New EventTest() 'イベント受信   Private Sub Handler(ByVal sender As System.Object, ByVal e As EventArgs) Handles _test._event Label1.Text = e.nowTime End Sub 'スレッド(5秒間隔でイベント発行) Private Sub _Thread() Dim i As Integer For i = 0 To 99 System.Threading.Thread.Sleep(5000) _test.Go() Next End Sub 'スレッド起動 Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click MyThread.Start() End Sub End Class 開発環境から普通に実行すれば正常に動作している様なのですが、 イベント受信部(Handler)のLabel1.Text = e.nowTime部に ブレークポイントを置いてLabel1のウォッチをするとその時点で 処理がとまってしまいます。なぜとまるのかが知りたいです。 作成方法がまずいのでしょうか? 皆様よろしくお願いいたします。

  • VB2010で、2つめのフォームを表示させると、フォームを閉じるまで1

    VB2010で、2つめのフォームを表示させると、フォームを閉じるまで1つめのフォームの操作ができないのですが、どなたか解決方法を御存じないでしょうか。 よろしくお願いします。 Form1のピクチャーボックスに描いた折れ線グラフ上のカーソル(Form11)が、 マウスの動きに合わせてグラフ線上をたどっていくようにしようとしています。 【Form1のボタンを押すと2つめのフォームを呼び出す】 Dim Mark As New Form11 Private Sub Button3_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button3.Click 'グラフカーソル表示 Mark.Show() 【呼び出されたフォームのコード】 Imports System.Drawing Public Class Form11 Private Sub Form2_Paint(ByVal sender As Object, ByVal e As System.Windows.Forms.PaintEventArgs) Handles Me.Paint 'フォームのクライアント領域のサイズを設定 Me.ClientSize = New System.Drawing.Size(20, 20) 'カーソルを描く Dim MarkPen As New Pen(Color.Red, 1) Dim g As Graphics = e.Graphics g.DrawEllipse(MarkPen, 0, 0, 20, 20) '円の描画 Me.TopMost = True '最全面 Me.TransparencyKey = Me.BackColor '透明色の設定 Me.FormBorderStyle = Windows.Forms.FormBorderStyle.None '枠なし End Sub End Class

  • VB2010 シリアル受信した情報を表示する

    VB2010 シリアル受信した情報を表示する フォームが表示されたらポートを開けてテキストボックスに文字を表示させたいです。 送られてくる情報はSTXとETXで挟まれた数十文字のアスキー文字です。 フォーム表示中は、teratermやハイパーターミナルで接続不可エラーが出ますし その逆でteratermやハイパーターミナルで接続している時にはcomポートエラーが出ます。 teratermやハイパーターミナルではシリアルで受信した文字が表示されています。 そのような状況で下記、シンプルなコードを作りましたが表示されません。 テキストボックスが何も変化しない状態です。なんでもいいので、テキストボックスに受信した情報を出してみたいです。 http://msdn.microsoft.com/ja-jp/library/cc720852.aspx を参考に受信部分に使っています。 Public Class Form1 Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load Call SerialPort1.Open() End Sub Delegate Sub AddDataDelegate(ByVal str As String) Private Sub AddData(ByVal str As String) TextBox1.Text = TextBox1.Text + str End Sub Private Sub SerialPort1_DataReceived(ByVal sender As Object, ByVal e As System.IO.Ports.SerialDataReceivedEventArgs) Handles SerialPort1.DataReceived Dim strDataReceived As String Dim add As New AddDataDelegate(AddressOf AddData) Try strDataReceived = SerialPort1.ReadLine Catch ex As Exception strDataReceived = ex.Message End Try TextBox1.Invoke(add, strDataReceived) End Sub End Class

  • vbのsavefiledialogについて

    vbで、テキストボックスに、文字を入力し、ボタン2をクリックすると、ユーザーが指定したところに、指定した名前で、txt形式、html形式、doc形式(このうち、txtと、htmlは必須。)で保存するプログラムを作りたいと思っております。 サイトを見てみますが、なかなかよいものが見つかりません。どなたか教えてください。 書きかけのプログラムと、フォーム図を載せておきます。 また、変更した方がよければ、そちらもおしえてください。 Public Class Form1 Dim texta As String Dim a Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load Button1.Text = "リセット" Button2.Text = "保存" texta = TextBox1.Text End Sub Private Sub TextBox1_TextChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles TextBox1.TextChanged texta = TextBox1.Text End Sub Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click TextBox1.Text = "" End Sub Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click a = DialogResult SaveFileDialog1.OverwritePrompt = True SaveFileDialog1.FileName = "" SaveFileDialog1.Filter = "テキストファイル(*.txt)|*.txt|すべてのファイル(*.*)|*.*" a = SaveFileDialog1.ShowDialog If a = Windows.Forms.DialogResult.OK Then Label1.Text = IO.Path.GetDirectoryName(SaveFileDialog1.FileName) Label2.Text = IO.Path.GetFileName(SaveFileDialog1.FileName) Else Label1.Text = "キャンセルされました。" Label2.Text = "" End If End Sub End Class

このQ&Aのポイント
  • 用紙設定107x150mm EW-052Aで絵葉書に印刷したいときの設定方法を教えてください。
  • この記事では、EPSON製品の用紙設定107x150mm EW-052Aを使用して絵葉書を印刷する方法について説明します。
  • 用紙設定107x150mm EW-052Aを使って絵葉書を印刷する際の設定方法についてご教示ください。
回答を見る