文書番号: 833033 - 最終更新日: 2007年4月29日 - リビジョン: 1.5

BUG: チェックされたリスト ボックス、タブ コントロール オブジェクトのデータ テーブルにバインドされているが保存されませんチェック項目の状態タブ ページを切り替えたとき

目次

すべて展開する | すべて折りたたむ

現象

TabControl オブジェクトを持つデータ テーブルにバインドされているチェックされたリスト ボックスを含むタブ ページを作成できます。 この TabControl オブジェクトのタブ ページを切り替えた場合、チェックされたリスト ボックスがチェックされた項目の状態を保存されないことがわかります。

回避策

この現象を回避する、次の手順に従います。

メモ 次の手順は、Microsoft .NET Framework バージョン 1. 1 を使用するアプリケーションに対してのみ有効です。 アプリケーションで、.NET を使用する場合 Framework Version 1. 0 では、次の手順が機能しません。
  1. Microsoft Visual Basic .NET を使用して、Windows を作成するアプリケーション プロジェクトです。 既定では、Form1.vb フォームが作成されます。
  2. TabControl コントロールを Form1 フォームに追加します。 既定では、 TabControl1 コントロールが作成されます。
  3. TabControl1 ] を右クリックし、 [タブの追加] を実行します。 既定では、 TabPage1 コントロールが作成されます。
  4. TabControl1 ] を右クリックし、 [タブの追加] を実行します。 既定では、 TabPage2 コントロールが作成されます。
  5. CheckedListBox コントロールを TabPage2 コントロールに追加します。 既定では、 CheckedListBox1 コントロールが作成されます。
  6. TabPage2 コントロールに DataSet コントロールを追加します。
  7. [データセットの追加 ] ダイアログ ボックスが表示される 型指定されていないデータセット ] をクリックし、 [OK]
  8. Form1_Load イベント ハンドラーで次のコード、 TabPage2 コントロールの CheckedListBox1 制御で複数の項目を作成する追加:
            DataSet1.Tables.Add()
            DataSet1.Tables(0).Columns.Add("Time")
            Dim times As String() = {TimeOfDay}
            Dim times1 As String() = {TimeOfDay}
            DataSet1.Tables(0).Rows.Add(times)
            DataSet1.Tables(0).Rows.Add(times1)
            CheckedListBox1.DataSource = DataSet1.Tables(0)
            CheckedListBox1.DisplayMember = "Time"
            checkboxCount = CheckedListBox1.Items.Count()
  9. TabPage2 コントロールの CheckedListBox1 コントロールで選択した項目の状態保存は、次のコードの CheckedListBox1_SelectedIndexChanged イベント ハンドラーに追加:
            ReDim Array1(checkboxCount - 1)
            Dim i As Integer
            For i = 0 To Array1.Length - 1
                Dim j As Boolean = CheckedListBox1.GetItemChecked(i)
                Array1(i) = j.ToString
            Next
  10. TabControl1_Click イベント ハンドラーで次のコードを選択した項目の状態を復元する追加:
            For k = 0 To Array1.Length - 1
                CheckedListBox1.SetItemChecked(k, Array1(k))
            Next
    に 0 を = k の
完全なコード一覧のとおりです:
    Public Class Form1
    Inherits System.Windows.Forms.Form

#Region " Windows Form Designer generated code "

    Public Sub New()
        MyBase.New()

        'This call is required by the Windows Form Designer.
        InitializeComponent()

        'Add any initialization after the InitializeComponent() call

    End Sub

    'Form overrides dispose to clean up the component list.
    Protected Overloads Overrides Sub Dispose(ByVal disposing As Boolean)
        If disposing Then
            If Not (components Is Nothing) Then
                components.Dispose()
            End If
        End If
        MyBase.Dispose(disposing)
    End Sub

    'Required by the Windows Form Designer
    Private components As System.ComponentModel.IContainer
    Private checkboxCount As Integer
    Private k As Integer


    'NOTE: The following procedure is required by the Windows Form Designer
    'It can be modified using the Windows Form Designer.  
    'Do not modify it using the code editor.
    Friend WithEvents TabControl1 As System.Windows.Forms.TabControl
    Friend WithEvents TabPage1 As System.Windows.Forms.TabPage
    Friend WithEvents TabPage2 As System.Windows.Forms.TabPage
    Friend WithEvents CheckedListBox1 As System.Windows.Forms.CheckedListBox
    Friend WithEvents CheckBox1 As System.Windows.Forms.CheckBox
    Friend WithEvents DataSet1 As System.Data.DataSet
    <System.Diagnostics.DebuggerStepThrough()> Private Sub InitializeComponent()
        Me.TabControl1 = New System.Windows.Forms.TabControl
        Me.TabPage1 = New System.Windows.Forms.TabPage
        Me.CheckBox1 = New System.Windows.Forms.CheckBox
        Me.TabPage2 = New System.Windows.Forms.TabPage
        Me.CheckedListBox1 = New System.Windows.Forms.CheckedListBox
        Me.DataSet1 = New System.Data.DataSet
        Me.TabControl1.SuspendLayout()
        Me.TabPage1.SuspendLayout()
        Me.TabPage2.SuspendLayout()
        CType(Me.DataSet1, System.ComponentModel.ISupportInitialize).BeginInit()
        Me.SuspendLayout()
        '
        'TabControl1
        '
        Me.TabControl1.Controls.Add(Me.TabPage1)
        Me.TabControl1.Controls.Add(Me.TabPage2)
        Me.TabControl1.Location = New System.Drawing.Point(8, 24)
        Me.TabControl1.Name = "TabControl1"
        Me.TabControl1.SelectedIndex = 0
        Me.TabControl1.Size = New System.Drawing.Size(272, 216)
        Me.TabControl1.TabIndex = 1
        '
        'TabPage1
        '
        Me.TabPage1.Controls.Add(Me.CheckBox1)
        Me.TabPage1.Location = New System.Drawing.Point(4, 22)
        Me.TabPage1.Name = "TabPage1"
        Me.TabPage1.Size = New System.Drawing.Size(264, 190)
        Me.TabPage1.TabIndex = 0
        Me.TabPage1.Text = "TabPage1"
        '
        'CheckBox1
        '
        Me.CheckBox1.Location = New System.Drawing.Point(8, 24)
        Me.CheckBox1.Name = "CheckBox1"
        Me.CheckBox1.Size = New System.Drawing.Size(96, 24)
        Me.CheckBox1.TabIndex = 0
        Me.CheckBox1.Text = "CheckBox1"
        '
        'TabPage2
        '
        Me.TabPage2.Controls.Add(Me.CheckedListBox1)
        Me.TabPage2.Location = New System.Drawing.Point(4, 22)
        Me.TabPage2.Name = "TabPage2"
        Me.TabPage2.Size = New System.Drawing.Size(264, 190)
        Me.TabPage2.TabIndex = 1
        Me.TabPage2.Text = "TabPage2"
        '
        'CheckedListBox1
        '
        Me.CheckedListBox1.Location = New System.Drawing.Point(8, 8)
        Me.CheckedListBox1.Name = "CheckedListBox1"
        Me.CheckedListBox1.Size = New System.Drawing.Size(136, 34)
        Me.CheckedListBox1.TabIndex = 0
        '
        'DataSet1
        '
        Me.DataSet1.DataSetName = "NewDataSet"
        Me.DataSet1.Locale = New System.Globalization.CultureInfo("en-US")
        '
        'Form1
        '
        Me.AutoScaleBaseSize = New System.Drawing.Size(5, 13)
        Me.ClientSize = New System.Drawing.Size(292, 266)
        Me.Controls.Add(Me.TabControl1)
        Me.Name = "Form1"
        Me.Text = "Form1"
        Me.TabControl1.ResumeLayout(False)
        Me.TabPage1.ResumeLayout(False)
        Me.TabPage2.ResumeLayout(False)
        CType(Me.DataSet1, System.ComponentModel.ISupportInitialize).EndInit()
        Me.ResumeLayout(False)

    End Sub

#End Region



    Dim Array1() As String
    Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load

        DataSet1.Tables.Add()
        DataSet1.Tables(0).Columns.Add("Time")
        Dim times As String() = {TimeOfDay}
        Dim times1 As String() = {TimeOfDay}
        DataSet1.Tables(0).Rows.Add(times)
        DataSet1.Tables(0).Rows.Add(times1)
        CheckedListBox1.DataSource = DataSet1.Tables(0)
        CheckedListBox1.DisplayMember = "Time"
        checkboxCount = CheckedListBox1.Items.Count()

    End Sub

    Private Sub CheckedListBox1_SelectedIndexChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles CheckedListBox1.SelectedIndexChanged

        ReDim Array1(checkboxCount - 1)
        Dim i As Integer
        For i = 0 To Array1.Length - 1
            Dim j As Boolean = CheckedListBox1.GetItemChecked(i)
            Array1(i) = j.ToString
        Next
    End Sub

    Private Sub TabControl1_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles TabControl1.Click
        For k = 0 To Array1.Length - 1
            CheckedListBox1.SetItemChecked(k, Array1(k))
        Next
    End Sub
End Class

状況

マイクロソフトでは、この問題をこの資料の対象製品として記載されているマイクロソフト製品の問題として認識しています。

詳細

動作を再現する手順

  1. Visual Basic .NET を使用して、Windows アプリケーションを作成するプロジェクト。
  2. TabControl コントロールを Form1 フォームに追加します。 既定では、 TabControl1 コントロールが作成されます。
  3. TabControl1 ] を右クリックし、 [タブの追加] を実行します。 既定では、 TabPage1 コントロールが作成されます。
  4. TabControl1 ] を右クリックし、 [タブの追加] を実行します。 既定では、 TabPage2 コントロールが作成されます。
  5. CheckedListBox コントロールを TabPage2 コントロールに追加します。 既定では、 CheckedListBox1 コントロールが作成されます。
  6. DataSet コントロールは、TabPage2 コントロールにドラッグします。
  7. [データセットの追加 ] ダイアログ ボックスが表示される 型指定されていないデータセット ] をクリックし、 [OK]
  8. Form1_Load イベント ハンドラーを作成する Form1 をダブルクリックします。
  9. Form1_Load イベント ハンドラーで、次のコード追加:
     dataset1.tables.add()
     dataset1.tables(0).columns.add("Time")
     dim times as string() = {timeofday}
     dataset1.tables(0).rows.add(times)
     checkedlistbox1.datasource = dataset1.tables(0)
     checkedlistbox1.displaymember = "Time"
  10. [ ビルド ] の [ 開始 ] をクリックします。 既定では、 Form1 フォームが表示されます。
  11. CheckedListBox1 コントロールを含むタブ ページに切り替えます。
  12. CheckedListBox1 コントロール内の項目をクリックします。
  13. その他のタブ ページに切り替えてからを CheckedListBox1 コントロールが含まれているタブ ページにします。 現象、この資料の「現象」に記載されていますいます。

関連情報

タブ コントロール クラスの詳細については、ご覧次マイクロソフト開発者向けネットワーク (MSDN) 下さい。
http://msdn2.microsoft.com/en-us/library/system.windows.forms.tabcontrol(vs.71).aspx (http://msdn2.microsoft.com/en-us/library/system.windows.forms.tabcontrol(vs.71).aspx)


この資料は以下の製品について記述したものです。
  • Microsoft Visual Studio .NET 2003 Enterprise Architect
  • Microsoft Visual Studio .NET 2003 Enterprise Developer
  • Microsoft Visual Studio .NET 2003 Professional Edition
  • Microsoft Visual Studio .NET 2003 Academic Edition
  • Microsoft Visual Studio .NET 2002 Enterprise Architect
  • Microsoft Visual Studio .NET 2002 Enterprise Developer
  • Microsoft Visual Studio .NET 2002 Professional Edition
  • Microsoft Visual Studio .NET 2002 Academic Edition
キーワード:?
kbmt kbvs2002sp1sweep kbuser kbappdev kbcode kbbug KB833033 KbMtja
機械翻訳機械翻訳
重要: このサポート技術情報 (以下「KB」) は、翻訳者による翻訳の代わりに、マイクロソフト機械翻訳システムによって翻訳されたものです。マイクロソフトは、お客様に、マイクロソフトが提供している全ての KB を日本語でご利用いただけるように、翻訳者による翻訳 KB に加え機械翻訳 KB も提供しています。しかしながら、機械翻訳の品質は翻訳者による翻訳ほど十分ではありません。誤訳や、文法、言葉使い、その他、たとえば日本語を母国語としない方が日本語を話すときに間違えるようなミスを含んでいる可能性があります。マイクロソフトは、機械翻訳の品質、及び KB の内容の誤訳やお客様が KB を利用されたことによって生じた直接または間接的な問題や損害については、いかなる責任も負わないものとします。マイクロソフトは、機械翻訳システムの改善を継続的に行っています。
英語版 KB:833033? (http://support.microsoft.com/kb/833033/en-us/ )
"Microsoft Knowledge Baseに含まれている情報は、いかなる保証もない現状ベースで提供されるものです。Microsoft Corporation及びその関連会社は、市場性および特定の目的への適合性を含めて、明示的にも黙示的にも、一切の保証をいたしません。さらに、Microsoft Corporation及びその関連会社は、本文書に含まれている情報の使用及び使用結果につき、正確性、真実性等、いかなる表明・保証も行ないません。Microsoft Corporation、その関連会社及びこれらの権限ある代理人による口頭または書面による一切の情報提供またはアドバイスは、保証を意味するものではなく、かつ上記免責条項の範囲を狭めるものではありません。Microsoft Corporation、その関連会社 及びこれらの者の供給者は、直接的、間接的、偶発的、結果的損害、逸失利益、懲罰的損害、または特別損害を含む全ての損害に対して、状況のいかんを問わず一切責任を負いません。(Microsoft Corporation、その関連会社 またはこれらの者の供給者がかかる損害の発生可能性を了知している場合を含みます。) 結果的損害または偶発的損害に対する責任の免除または制限を認めていない地域においては、上記制限が適用されない場合があります。なお、本文書においては、文書の体裁上の都合により製品名の表記において商標登録表示、その他の商標表示を省略している場合がありますので、予めご了解ください。"
 

サポート技術情報の翻訳