VB6でのCheckBoxのCaptionの表示について

このQ&Aのポイント
  • VB6の中でCheckBoxを使用しています。Caption(表示項目)が毎回異なる為にプロパティ内で設定することが出来ず、ソースにて表示させています。
  • 最近になって全ての機械でもないし、毎回ではないのですが、Captionが表示されないという現象が時々発生するようになりました。他に原因として考えられることはありますか?
  • PCの入替と同時に発生するようになりました。PCのOSはXPから7に変更しています。全く同じプログラムを以前(XP機)も別の箇所で使用していましたが、このような現象は一度も起きたことありませんでした。
回答を見る
  • ベストアンサー

VB6でのCheckBoxのCaptionの表示について

VB6でのCheckBoxのCaptionの表示について VB6の中でCheckBoxを使用しています。 しかし、Caption(表示項目)が毎回異なる為に プロパティ内で設定することが出来ず、 ソースにて表示させています。 ちなみに複数台にてそのVBで作ったシステムを稼働しています。 それが今までは問題なく表示されていたのですが、 最近になって全ての機械でもないし、毎回ではないのですが、 Captionが表示されないという現象が時々発生するようになりました。 そこで初歩的ではありますがCaptionに項目名を設定する前に Refreshを書き足しましたが状況は変わりません。 他に原因として考えられることはありますか? お分かりになる方がいたら回答よろしくお願い致します。 ちなみに上記の「最近になって」という記述ですが PCの入替と同時に発生するようになりました。 また、PCのOSはXPから7に変更しています。 但し、入替と同時に追加したプログラムではありますが、 全く同じプログラムを以前(XP機)も別の箇所で使用していましたが このような現象は一度も起きたことありませんでした。 以下にソースを記述します。 --------------------------------------------------------------------------------- Dim T1 As Integer Dim T2 As String * 7 T2 = Trim(T114) + "/" + Right$(Space$(2) + Format((T115), "00"), 2) For T1 = 101 To 112 Step 1 フォーム名.Refresh CH(T1).Caption = Trim(T2) CH(T1).Enabled = True T2 = Trim(Mid$(T2, 1, 4)) + "/" + Right$(Space$(2) + Format(Mid$(T2, 6, 2) + 1, "00"), 2) If Mid$(T2, 6, 2) = 13 Then T2 = Trim(T114 + 1) + "/" + "01" Next T1 --------------------------------------------------------------------------------- 一応、捕捉しますと CH=CheckBoxのオブジェクト名 T114=西暦が入力されているTextBox(ImText) T115=月が入力されているTextBox(ImText) となっております。

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

  • ベストアンサー
  • samtomsan
  • ベストアンサー率55% (1060/1897)
回答No.3

ANo.1の続きです。 RefreshはやはりCaptionを設定した後に実行しますが、Forの中だともう一つ問題があります。 この場合は 101~112 ですからたいした問題にはなりませんが、Forの中ではCPUを他のプロセスに渡しませんので、処理によっては DoEvents を入れる必要があります。 これを忘れると For の中を処理中には他のプロセスが処理されないため、例えば、For の処理を中断するためのフラグを他で立てて、Forの中で判定するような場合に、そのフラグが渡ってきません。 Refreshの変わりに DoEventsでもいいかもしれません。

bay_simo
質問者

お礼

重ね重ねありがとうございます! 今のところはsamtomsan様にアドバイス頂いた方法で 現象が発生しておりません。 このまま再び発生しないことを願いたいところです。

その他の回答 (2)

回答No.2

もしかすると、表示領域が狭いために文字列幅が広い場合にCaptionが表示されないということですかね? CheckBoxの幅を広げてみてはどうでしょうか。 同じ事象に遭遇したことはないので、勘です。

bay_simo
質問者

補足

早速の回答ありがとうございます。 ですが、CheckBoxの幅は余るほど取ってあります。 けれど今後の参考にしたいと思います。

  • samtomsan
  • ベストアンサー率55% (1060/1897)
回答No.1

> Captionに項目名を設定する前に > Refreshを書き足しましたが状況は変わりません 項目名を設定した後にRefreshだと思いますが、いかがでしょうか。

bay_simo
質問者

お礼

本文にも書きました通り、症状が出るのは 特定のPCではないですし、毎回ではないので、 すぐに結果が分かりませんが試してみたいと思います。 回答ありがとうございました!

関連するQ&A

  • CheckBoxがTrueの場合に表示をさせるには?

    VB2008を使用しています。 3つのCheckBox1~3とそれに対応した3つのTextBox1~3を準備し、 Buttonを押すとCheckBoxがTrueのものだけをRichTextBox1に表示 させたくて下記のプログラムを作成しました。 しかしCheckBox1とCheckBox3については上手く作動するのですが CheckBox2について不具合が発生します。 (不具合) CheckBox1=TrueでButtonを押すとRichTextBox1にTextBox1を表示。 その後、CheckBox3=TrueでButtonを押すとRichTextBox1にTextBox1. TextBox3と表示。 ここまでは良いのですが、 CheckBox2=TrueでButtonを押すとRichTextBox1にTextBox2を表示。 その後、CheckBox3=TrueでButtonを押すとRichTextBox1にTextBox2. TextBox2.TextBox3と表示されてしまいTextBox2の内容が重複して しまいまいます。 何か良い解決策がありましたら教えて下さい。 よろしくお願いいたします。 Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click     If Me.CheckBox1.Checked = True Then RichTextBox1.Text = TextBox1.Text End If     If Me.CheckBox2.Checked = True Then If RichTextBox1.Text <> "" Then RichTextBox1.Text = RichTextBox1.Text & "."     End If RichTextBox1.Text = RichTextBox1.Text & TextBox2.Text     End If If Me.CheckBox3.Checked = True Then If RichTextBox1.Text <> "" Then RichTextBox1.Text = RichTextBox1.Text & "." End If RichTextBox1.Text = RichTextBox1.Text & TextBox3.Text End If End Sub

  • CheckBoxとTextBoxの値を貼付る方法

    よろしくお願いします。 Dim n As Long Dim r As Range Dim C, buf As String n = Cells(Rows.Count, "A").End(xlUp).Row + 1 Range("A" & n).Select For Each C In Controls If TypeName(C) = "CheckBox" Then If C.Value Then buf = buf & C.Caption & vbCrLf End If Next C ActiveCell.Offset(-1, 16).Value = buf & TextBox9.Value ’buf=チェックされている複数のCheckBoxのCaption ’この時のActiveCell.Offset(-1, 16).ValueにはbufとTextBox9の値も表示されています。 End If で、セルに入力して ActiveCell.Offset(0, 7).Value = ActiveCell.Offset(-1, 16).Value で、セルに貼り付けようとすると、bufの値のみ表示されてTextBox9の値が表示されません。 bufの値とTextBox9の値と両方をコピー表示する方法をお教えください。

  • vb.netでオブジェクトの種類を知りたい

    こんばんわ vb.netでオブジェクトの種類を知る方法はないでしょうか? 例 form上にtextbox1を配置した上で 'メインルーチン public sub main() dim ret = test(textbox1) msgbox("textbox1は" & ret & "です") endsub 'サブルーチン public function test(obj) dim ret as string 'ここでobjがtextboxかcheckboxか判別したい return ret end function このようなことが可能でしょうか? 可能なようでしたらどうすればよいかご教授お願いします。

  • VB6.0からVB2008移植時のStringの使用方法

    初歩的な質問だと思うのですが色々調べてもわからなかったのでご教授願います。 VB6.0からVB2008にプログラムを移植しているのですが以下の部分の修正方法がわかりません。 元(VB6.0)のソース Dim strStart, strEnd As String strStart = Format( data.Start(0), "0.0" ) strEnd = Format( data.End(0), "0.0" ) Label.Caption = strStart & "-" & strEnd 'data.Start/data.EndはSingleの配列 VB2008のソース Dim strStart As String Dim strEnd As String strStart = VB6.Format( data.Start(0), "0.0" ) strEnd = VB6.Format( data.End(0), "0.0" ) Label.Caption = strStart & "-" & strEnd 'VB6.Format~はソースをUpGradeしたときに自動で変換されました VB2008のstrStartに設定する時点でエラー('System.NullReferenceException' の初回例外が DataRcvSample.exe で発生しました。)となりstrStartがNothingなのがいけないところまではわかったのですが、Newを使ってどのように設定すればいいのかがわかりません。 VB自体まだ2週間位しか触っていない初心者なのですが、急ぎの仕事で勉強する時間がなく、どうすればいいのか困っています。 修正方法をご教授願います。

  • VBのコーディングについて

    はじめまして。VBの課題で行き詰ってしまったので、力を貸していただければと思います。 課題は【商品一覧からレコードを取得し、取得したレコードを商品区分で集計し、商品区分・商品件数・売上合計金額を区分別売上表に出力する】 といったものです。 商品一覧には、【商品区分・商品名・売上】の順にデータが入っています。 自分なりに考えた手順は Private Sub コマンド1_Click() Dim INP_DATA As String Dim kubun_01 As String Dim syohin_01 As String Dim uriage_01 As Integer Dim kubun_02 As String Dim syohin_02 As String Dim uriage_02 As Integer  Open "C:INFILE.txt" For Input As #1 Open "C:OUT_FILE.txt" For Output As #2 'ファイルの終了までループ Do Until EOF(1) Line Input #1, INP_DATA '読み込んだレコードの各項目を変数に代入 kubun_01 = Trim(Left(INP_DATA, 10)) syohin_01 = Trim(Mid(INP_DATA, 11, 10)) uriage_01 = Right(INP_DATA, 8) '一行目かどうか If Trim(Mid(INP_DATA, 11, 10)) = syohin_01 kubun_01 = Trim(Left(INP_DATA, 10)) syohin_01 = Trim(Mid(INP_DATA, 11, 15)) uriage_01 = Right(INP_DATA, 8) ElseIf Trim(Mid(INP_DATA, 11, 10)) <> syohin_01 Then kubun_02 = Trim(Left(INP_DATA, 10)) syohin_02 = Trim(Mid(INP_DATA, 11, 10)) uriage_02 = Right(INP_DATA, 8) End If If kubun = kubun_hikaku_2 Then goukei = uriage_hikaku_2 + uriage ElseIf kubun <> kubun_hikaku_2 Then Print #2, kubun; syohin; goukei End If Loop '新たに比較用の変数に格納 Do Until EOF(1) Line Input #1, INP_DATA kubun_01 = Trim(Left(INP_DATA, 10)) syohin_01 = Trim(Mid(INP_DATA, 11, 10)) uriage_01 = Right(INP_DATA, 8) Loop Debug.Print "PROGRAM END" Close #1 Close #2 End Sub となっています。長くなってしまい申し訳ありません。 上記のコーディングですと、欲しいデータが返ってこないので、 どなたかご教授いただけないでしょうか?? よろしくお願いいたします。

  • CheckBoxのコントロール配列について

    VB2008を使用しています。 True状態のCheckBox1~70をButtonを押すことによってFalse状態にさせようとしていますが、一つずつコードを記載するのは長くなってしまうため以前こちらに投稿されていたTextBoxのコントロール配列を参考に下記のコードを作成しました。 Dim c As Integer For c = 1 To 70 Me.Controls("CheckBox" & c.ToString).Checked = False Next しかし、このコードでは下記のエラーが出てしまいます。 "CheckedはSystem.Windows.Forms.Controlのメンバではありません。" どなたかお知恵をお貸し下さい。

  • VB2005でで正しい計算結果が出ません。

    VB2005でで正しい計算結果が出ません。 こんにちわ。プログラミング初心者です。どうかよろしくお願いします。 緯度経度を変換する計算式をプログラムしたのですが、計算結果が間違って出力されます。 下にプログラムを書くのでどこがおかしいのか、またどうすれば正しい計算結果が求められるのかを教えてください。お願いします。 ちなみにTextBox22には 3601.4589 、 TextBox23には 13942.9930 のような数字が入っています。 Private Sub seriWork() Dim buffer, buffer2() As String Dim di1, di2, dk1, dk2 As Double '~通信に関するところなので中略します~ '~ここから先が計算です~ 'Dの緯度百分率変換表示 TextBox22.Text = dN di1 = Double.Parse(Mid(TextBox22.Text, 1, 2)) di2 = Double.Parse(Mid(TextBox22.Text, 3, 7)) TextBox14.Text = di1 + (di2 / 60).ToString() 'Dの経度百分率変換表示 TextBox23.Text = dE dk1 = Double.Parse(Mid(TextBox23.Text, 1, 3)) dk2 = Double.Parse(Mid(TextBox23.Text, 4, 7)) TextBox15.Text = dk1 + (dk2 / 60).ToString() Me.Invoke(New ReDelgate(AddressOf completed)) End If Loop Catch ex As Exception MessageBox.Show(ex.Message, "エラー", MessageBoxButtons.OK, MessageBoxIcon.Error) Finally If SerialPort1.IsOpen = True Then SerialPort1.Close() End Try End If この計算の意図は、GPSレシーバーから受信される「3601.4589」のような形の座標形式を googl mapで表示できる座標に変換するものです。 たとえば、シリアルポートでGPSから受信した緯度が3601.4589 の場合は、「=36 + (1.4589 / 60)」と計算すると 36.024315 のような形になります。 あと、3601.4589 を 36と1.4589で分割するためにMidを使用しています。 /60は公式です。 上記プログラムだと 62.3333333 のような誤解答が出てきます。 どうか教えてください。お願いします。

  • VB2008

    VB初心者です、よろしくお願いいたします。 現在、VB2008を使い、顧客名簿を作成しています。 前回の質問で、テキストファイルのファイル名だけを取得する方法は分かったのですが、そのファイルの内容をテキストボックスに表示する方法がうまくいきません。 ファイルの内容は 1行目→名前 2行目→メールアドレス 3行目→郵便番号 4行目→住所 5行目→購入した商品 をそれぞれ、textbox1~5に表示させたいと思っています。 書籍などで調べた結果 Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click Dim totalcount As Integer Dim oneline As String Dim sr As System.IO.StreamReader sr = New System.IO.StreamReader("C:hogehoge\" & ComboBox1.Text & ".txt") oneline = sr.ReadLine() sr.Close() Dim skipline As Integer Dim r As Random = New Random() skipline = r.Next(totalcount) sr = New System.IO.StreamReader("C:hogehoge\" & ComboBox1.Text & ".txt") Dim i As Integer = 0 Do While i < skipline sr.ReadLine() i += 1 Loop oneline = sr.ReadLine() sr.Close() TextBox1.Text = oneline TextBox2.Text = (skipline + 1).ToString() End Sub このような記述になりました。 textbox1には問題なく名前が表示されますが、textbox2には"1"と表示されてしまいます。 すみませんが、修正箇所を教えていただけませんか? よろしくお願いいたします。

  • VB6では、Applicationは未定義なのでしょうか?

    VB6を使ってプログラムを書いているのですが、以下のソースの部分で エラーになりました。 Dim winname As String winname = Application.Caption <-- Applicationが未定義?  コンパイルエラー 変数が定義されていません。 というエラーメッセージが表示されます。 VB6では、Applicationは未定義なのでしょうか?

  • ステートメントの簡略方法(ループ)

    Visual Basic 6.0 For/Doを使って省略可させようと考えているのですが、オブジェクト名は ループさせて省略可出来ないのでしょうか? 下記はフォームロード時に各セルの値を各CommandButton名に割り当てています。(一部分です) (例) CB○はCommandButtonのオブジェクト名です。 Form2.CB1.Caption = Trim(xlSheet.Cells(11, 3)) Form2.CB2.Caption = Trim(xlSheet.Cells(12, 3)) Form2.CB3.Caption = Trim(xlSheet.Cells(13, 3)) Form2.CB4.Caption = Trim(xlSheet.Cells(14, 3)) Form2.CB5.Caption = Trim(xlSheet.Cells(15, 3)) ・ ・ ・  ↓ Dim SUU As Integer Dim i As Integer SUU = 0 For i = 1 To 20 Step 1 SUU = SUU + 1 Form2.CB1.Caption = Trim(xlSheet.Cells(10 + SUU, 3)) Next i CB1の部分を "CB" & SUU の様にしたいのですが、エラーしてしまいます。 省略可の方法が有りましたら教えて下さい。

専門家に質問してみよう