VB2008EEのチェックボックスにて、9個のチェックボックスをオン/オフで9個のテキストボックスに文字を表示/非表示させる場合、なぜ4までと5からで動作が変わるのでしょうか?

このQ&Aのポイント
  • VB2008EEのチェックボックスを使用して、9個のチェックボックスをオン/オフで9個のテキストボックスに文字を表示/非表示させる場合、4つまでは正常に機能するが、5つ以上のチェックボックスでは正常に動作しない。
  • チェックボックスにチェックが入っているかどうかを判断して、対応するテキストボックスに文字を表示するようにプログラムが設定されている。しかし、4つまでは正常に機能するが、5つ以上のチェックボックスでは正常に動作しない。
  • プログラムの中で各チェックボックスの状態を確認し、対応するテキストボックスに文字を表示するかどうかを判断しているが、5つ以上のチェックボックスではこの処理が正常に行われない可能性がある。なぜ4までと5からで動作が変わるのかについては、詳細なコードや環境の情報が不足しているため、特定の原因を特定することは困難である。
回答を見る
  • ベストアンサー

VB2008EEのチェックボックスにて、

VB2008EEのチェックボックスにて、 9個のチェックボックスをオン/オフで9個のテキストボックスに文字を表示/非表示させる場合、 一旦チェックをオンにすると値が入ったままになって、オフにしても表示されてしまうため チェックがオフのものはボタン1クリックで空にしています。 1~9まであるのですが、1~4までは機能しているのですが、5~9が機能しません。 1~4にチェックが入っていると下記は実行されません。 5~9にチェックが入っていても下記が実行されてしまいます。      (実際は各番号)         ↓ If CheckBox5.CheckState = CheckState.Unchecked Then layp5 = "" End If なぜ4までと5からで動作が変わるのでしょうか? -------------------------------------------------------------- Private Sub CheckBox1_CheckedChanged(ByVal sender As System.Object,ByVal e As System.EventArgs) Handles CheckBox1.CheckedChanged layp1 = "1" End Sub '実際は2~8も記述あり Private Sub CheckBox9_CheckedChanged(ByVal sender As System.Object,ByVal e As System.EventArgs) Handles CheckBox1.CheckedChanged layp9 = "9" End Sub Private Sub Button1_Click(ByVal sender As System.Object, ByVal eAsSystem.EventArgs) Handles Button1.Click If CheckBox1.CheckState = CheckState.Unchecked Then layp1 = "" End If '実際は2~8も記述あり If CheckBox9.CheckState = CheckState.Unchecked Then layp9 = "" End If If (layp1 = "1") Then TextBox1.Text = "aaaaa" End If If (layp2 = "2") Then TextBox2.Text = "bbbbb" End If If (layp3 = "3") Then TextBox3.Text = "ccccc" End If If (layp4 = "4") Then TextBox4.Text = "ddddd" End If If (layp5 = "5") Then TextBox5.Text = "eeeee" End If If (layp6 = "6") Then TextBox6.Text = "fffff" End If If (layp7 = "7") Then TextBox7.Text = "ggggg" End If If (layp8 = "8") Then TextBox8.Text = "hhhhh" End If If (laypca = "9") Then TextBox9.Text = "iiiii" End If End Sub

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

  • ベストアンサー
回答No.1

VB2008EEのチェックボックスにて、 9個のチェックボックスをオン/オフで9個のテキストボックスに文字を表示/非表示させる場合、 一旦チェックをオンにすると値が入ったままになって、オフにしても表示されてしまうため チェックがオフのものはボタン1クリックで空にしています。 1~9まであるのですが、1~4までは機能しているのですが、5~9が機能しません。 1~4にチェックが入っていると下記は実行されません。 5~9にチェックが入っていても下記が実行されてしまいます。      (実際は各番号)         ↓ If CheckBox5.CheckState = CheckState.Unchecked Then layp5 = "" End If なぜ4までと5からで動作が変わるのでしょうか? Private Sub CheckBox4_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles CheckBox4.CheckedChanged ↑重要なのは Handles CheckBox4.CheckedChanged という部分です。 Handles CheckBox5.CheckedChanged に変更すると、CheckBox5の変更時にCheckBox4_CheckedChangedが実行されます。 CheckBox5以降のハンドリングさせている関数の、「Handles」以降がどのようになっているかが気になります。 (質問内容では省略されているため) ※余談 似たようなコントロールが多数ある場合、一つの関数に複数のコントロールのイベントを流し込むと、コードが簡略化できます。 http://dobon.net/vb/dotnet/control/buttonarray.html

yurielna
質問者

お礼

チェックボックスの配置が2列で半時計周りになっているのに、 値を入れいている順番が↓↓になっていました。 これで右側の5~9の列が正しく動作していなかったようです。 お騒がせしました、すみません。 初めにアドバイス頂いた余談の方法も勉強して試してみます。 ありがとうございました。  

yurielna
質問者

補足

文字制限の為に、同じ記述の繰り返しなので省略しました。 Handles CheckBox5.CheckedChanged 5の所は5になっています。 > 5~9にチェックが入っていても下記が実行されてしまいます。 If CheckBox5.CheckState = CheckState.Unchecked Then layp5 = "5" End If チェックボックス5にチェックを入れて上記の記述をすると、テキストが表示されます。 1~4はチェックが無いときに実行されます。

その他の回答 (1)

回答No.2

省略されているところを復元してやってみたのですが、そちらが言う状況が再現しません。 省略部分のコードに原因があるようなきがしてならないのですが。。。 試しに以下のコードを実行したらどうなるか教えてもらえませんか? 現在のそちらで利用されている2メソッド Private Sub Button1_Click( Private Sub CheckBox1~9_CheckedChanged( をコメントアウト ↓ここ以降を追加 Dim layps(8) As String Private Sub CheckBox_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles CheckBox1.CheckedChanged, CheckBox2.CheckedChanged, CheckBox3.CheckedChanged, CheckBox4.CheckedChanged, CheckBox5.CheckedChanged, CheckBox6.CheckedChanged, CheckBox7.CheckedChanged, CheckBox8.CheckedChanged, CheckBox9.CheckedChanged   Dim l_chk As CheckBox = DirectCast(sender, CheckBox)   Dim l_int As Integer = Integer.Parse(l_chk.Name.Substring(l_chk.Name.Length - 1))   layps(l_int - 1) = l_int End Sub Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click   For i As Integer = 1 To layps.Length     Dim l_chk As CheckBox = Me.Controls("CheckBox" + i.ToString())     If Not l_chk.Checked Then       layps(i - 1) = ""     End If   Next   For i As Integer = 1 To layps.Length     Dim l_txt As TextBox = Me.Controls("TextBox" + i.ToString())     If layps(i - 1) = i.ToString() Then       l_txt.Text = New String(Chr(Asc("a") + i - 1), 5)     End If   Next End Sub

関連するQ&A

  • VB2008EEのラジオボタンのチェック無し

    VB2008EEのラジオボタンのチェック無し     4つにチェックを入れてしまうと、全ての変数に値が入ってしまい、ボタンクリック時にチェックが 入っていないのを含めて、batファイル4つとも実行されてしまいます。 チェックボックスだと、下記でチェックされていないもの値を変えられます。 If CheckBox1.CheckState = CheckState.Unchecked Then   aaa = "9" End If ラジオボタンでチェックされていない所の変数を変える事は出来るでしょうか? Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click If (aaa = "1") Then Shell("cmd /c xxx.bat", AppWinStyle.NormalFocus, True) End If If (bbb = "2") Then Shell("cmd /c yyy.bat", AppWinStyle.NormalFocus, True) End If If (ccc = "3") Then Shell("cmd /c zzz.bat", AppWinStyle.NormalFocus, True) End If If (ddd = "4") Then Shell("cmd /c www.bat", AppWinStyle.NormalFocus, True) End If End Sub Private Sub RadioButton1_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles RadioButton1.CheckedChanged aaa = "1" End Sub Private Sub RadioButton2_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles RadioButton2.CheckedChanged bbb = "2" End Sub Private Sub RadioButton3_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles RadioButton3.CheckedChanged ccc = "3" End Sub Private Sub RadioButton4_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles RadioButton4.CheckedChanged ddd = "4" End Sub

  • VB2008EEラジオボタンにて、

    VB2008EEラジオボタンにて、 チェックされていない時、というのはif文で指定できるでしょうか? チェックボックスは、下記で出来ますが、ラジオボタンでは出来るでしょうか? Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click If CheckBox1.CheckState = CheckState.Unchecked Then   aaa = "1" End If End Sub 複数のラジオボタンがあって1つ選んだ後に別のを選び直した後に、選ばれてないほうの値を変えたいです。 Private Sub RadioButton1_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles RadioButton1.CheckedChanged aaa = "1" End Sub Private Sub RadioButton2_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles RadioButton2.CheckedChanged bbb = "2" End Sub

  • VB2008EEのラジオボタンのチェック無し

    VB2008EEのラジオボタンのチェック無し     4つにチェックを入れてしまうと、全ての変数に値が入ってしまい、ボタンクリック時にチェックが 入っていないのを含めて、batファイル4つとも実行されてしまいます。 チェックボックスでも同じような記述をしていまして、下記の記述でチェックされていないものの値を変えられます。 If CheckBox1.CheckState = CheckState.Unchecked Then   aaa = "9" End If Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click If (aaa = "1") Then Shell("cmd /c xxx.bat", AppWinStyle.NormalFocus, True) End If If (bbb = "2") Then Shell("cmd /c yyy.bat", AppWinStyle.NormalFocus, True) End If If (ccc = "3") Then Shell("cmd /c zzz.bat", AppWinStyle.NormalFocus, True) End If If (ddd = "4") Then Shell("cmd /c www.bat", AppWinStyle.NormalFocus, True) End If End Sub Private Sub RadioButton1_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles RadioButton1.CheckedChanged aaa = "1" End Sub Private Sub RadioButton2_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles RadioButton2.CheckedChanged bbb = "2" End Sub Private Sub RadioButton3_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles RadioButton3.CheckedChanged ccc = "3" End Sub Private Sub RadioButton4_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles RadioButton4.CheckedChanged ddd = "4" End Sub レベル低いといきなりラスボスは倒せないので、目先のミッションクリアが目的です。 応用は後々学んで行きます。 「ラジオボタンでチェックされていない所の変数を変える事は出来るでしょうか?」  

  • VB2008EEのラジオボタンのチェック無し

    VB2008EEのラジオボタンのチェック無し     4つにチェックを入れてしまうと、全ての変数に値が入ってしまい、ボタンクリック時にチェックが 入っていないのを含めて、batファイル4つとも実行されてしまいます。 チェックボックスでも同じような記述をしていまして、下記の記述でチェックされていないものの値を変えられます。 If CheckBox1.CheckState = CheckState.Unchecked Then   aaa = "9" End If Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click If (aaa = "1") Then Shell("cmd /c xxx.bat", AppWinStyle.NormalFocus, True) End If If (bbb = "2") Then Shell("cmd /c yyy.bat", AppWinStyle.NormalFocus, True) End If If (ccc = "3") Then Shell("cmd /c zzz.bat", AppWinStyle.NormalFocus, True) End If If (ddd = "4") Then Shell("cmd /c www.bat", AppWinStyle.NormalFocus, True) End If End Sub Private Sub RadioButton1_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles RadioButton1.CheckedChanged aaa = "1" End Sub Private Sub RadioButton2_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles RadioButton2.CheckedChanged bbb = "2" End Sub Private Sub RadioButton3_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles RadioButton3.CheckedChanged ccc = "3" End Sub Private Sub RadioButton4_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles RadioButton4.CheckedChanged ddd = "4" End Sub レベル低いといきなりラスボスは倒せないので、目先のミッションクリアが目的です。 応用は後々学んで行きます。 「ラジオボタンでチェックされていない所の変数を変える事は出来るでしょうか?」

  • 2つのチェックボックスを制御

    2つのチェックボックスがあり両方ともはずせて片方だけにチェックがつく2つの チェックボックスが作りたいです 自分なりに作成してみました。このソースで不具合等ありませんでしょうか Private Sub ckb1_CheckedChanged(ByVal sender As Object, ByVal e As System.EventArgs) Handles ckb1.CheckedChanged If ckb1.Checked = True Then ckb2.Checked = False End If End Sub Private Sub ckb2_CheckedChanged(ByVal sender As Object, ByVal e As System.EventArgs) Handles ckb2.CheckedChanged If ckb2.Checked = True Then ckb1.Checked = False End If End Sub 新人プログラマーなので自信がありません

  • VB2008でチェックボックスを用いての複数相手へのメール送信について

    いつもお世話になります。 VB2008で複数の相手へメールを送る簡易アプリケーションを作成しております。 チェックボックスを選択をすると、選択しました。外すと選択カから外れましたとメッセージ表示は出来ましたが、 肝心のメールアドレスを組み込む為のコードが分からず苦慮しております。 以下が作成したコードです。 Private Sub CheckBox1_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles CheckBox1.CheckedChanged If CheckBox1.Checked = True Then MessageBox.Show(CheckBox1.Text & "が選択されました。", "適用メッセージ") Else MessageBox.Show("選択が解除されました。", "通知メッセージ") End If End Sub チェックボックスにメールアドレスを組み込み、 メール送信出来るようにするには、どのようなコードを入力すれば良いでしょうか? ホームページで調べたりしましたが、分からずの状態です。 お手数をお掛けしまして申し訳ありませんが、ご教授頂けたらと思います。 チェックボックスは、40個ありまして単独である場合もあります。 またグループアドレスに送る場合もあります。また宛先がTO、CC、BCCもあります。 宜しくお願い申し上げます。

  • 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

  • VBでデバックするとエラーになる。

    VBでデバックすると下のようなエラーがでます ArgumentNullExceptionはハンドルされませんでした。 値を Null にすることはできません。 パラメーター名: activationContext VBを初めて日が浅いのでヘルプを読んでも意味が理解できませんでした。 なので、易しく回答してもらえると嬉しいです コードは下です Public Class Form1 'TextBox2に入力したURLをWebBrowser1で表示する Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click WebBrowser1.Navigate(TextBox2.Text) End Sub 'ブラウザ→戻るでWebBrowser1を処理する Private Sub 戻るToolStripMenuItem_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles 戻るToolStripMenuItem.Click WebBrowser1.GoBack() End Sub 'ブラウザ→進むでWebBrowser1を処理する Private Sub 進むToolStripMenuItem_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles 進むToolStripMenuItem.Click WebBrowser1.GoForward() End Sub 'ブラウザ→テキストボックスにURLを入力した時の処理 Private Sub ToolStripTextBox1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles ToolStripTextBox1.Click WebBrowser1.Navigate(ToolStripTextBox1.Text) End Sub 'TextPageのタブをクリックした時のイベント Private Sub TabPage1_Enter(ByVal sender As Object, ByVal e As System.EventArgs) Handles TabPage1.Enter TextBox2.Visible = False Button1.Visible = False ブラウザToolStripMenuItem.Enabled = False 書式ToolStripMenuItem.Enabled = True ToolStripMenuItem1.Enabled = True End Sub 'BrowserPageのタブをクリックした時のイベント Private Sub TabPage2_Enter(ByVal sender As Object, ByVal e As System.EventArgs) Handles TabPage2.Enter TextBox2.Visible = True Button1.Visible = True ブラウザToolStripMenuItem.Enabled = True 書式ToolStripMenuItem.Enabled = False ToolStripMenuItem1.Enabled = False End Sub Private Sub 新規ToolStripMenuItem_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles 新規ToolStripMenuItem.Click TextBox1.Text = ("") End Sub Private Sub 開くToolStripMenuItem_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles 開くToolStripMenuItem.Click Dim selectButton As DialogResult Dim filename As String selectButton = OpenFileDialog1.ShowDialog() filename = OpenFileDialog1.FileName If selectButton = DialogResult.OK Then Try TextBox1.Text = _ My.Computer.FileSystem.ReadAllText(filename, System.Text.Encoding.Default) Me.Text = "Visual Text" & filename Catch ex As Exception End Try End If End Sub Private Sub 保存ToolStripMenuItem_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles 保存ToolStripMenuItem.Click Dim selectButton As DialogResult Dim filename As String selectButton = SaveFileDialog1.ShowDialog() filename = SaveFileDialog1.FileName If selectButton = DialogResult.OK Then Try My.Computer.FileSystem.WriteAllText(filename, TextBox1.Text, False, System.Text.Encoding.Default) Me.Text = "Visual Text" & filename Catch ex As Exception End Try End If End Sub Private Sub フォントToolStripMenuItem_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles フォントToolStripMenuItem.Click Dim fd As New FontDialog() fd.Font = TextBox1.Font fd.Color = TextBox1.ForeColor fd.MaxSize = 19 fd.MinSize = 8 fd.FontMustExist = True fd.AllowVerticalFonts = False fd.ShowColor = True fd.ShowEffects = True fd.FixedPitchOnly = False fd.AllowVectorFonts = True If fd.ShowDialog() <> DialogResult.Cancel Then 'TextBox1のフォントと色を変える TextBox1.Font = fd.Font TextBox1.ForeColor = fd.Color End If End Sub End Class

  • RichTextBoxに代入されたTextBoxの数を表示

    VB2008を使用しています。現在、10個のTextBoxとそれに対応するCheckBoxを作成し、チェックの入ったTextBox内の文字をRichTextBoxに代入するプログラムを作成しています。そこでRichTextBoxに代入されたTextBoxの数を別のTextBoxに表示させたいのですが何か良い方法はありますでしょうか?現在、下記のようにコードを組んであります。 Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click RichTextBox1.Clear() If Me.CheckBox1.Checked = True Then RichTextBox1.Text = TextBox1.Text If Me.CheckBox2.Checked = True Then If RichTextBox1.Text <> "" Then RichTextBox1.Text = RichTextBox1.Text & "・" End If RichTextBox1.Text = RichTextBox1.Text & TextBox2.Text ・ ・ ・ If Me.CheckBox10.Checked = True Then If RichTextBox1.Text <> "" Then RichTextBox1.Text = RichTextBox1.Text & "・" End If RichTextBox1.Text = RichTextBox1.Text & TextBox10.Text End If

  • 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 ----------------------------------------------------- 以上

専門家に質問してみよう