2017-07-28 21 views
0

私はいくつかの項目を別の色にしたかったリストボックスを持っていますが、これを行うために私はdrawmodeをownerdrawfixedに設定する必要があります。これは問題なく動作しますが、選択したアイテムを取得できません。 drawmodeをnormalに設定して、リストボックス内の項目をクリックすると、そのテキストをテキストボックスに配置します。 drawmodeをownerdrawfixedに設定してアイテムをクリックすると、「タイプ 'アイテム'から 'タイプ'ストリング 'への変換が無効であるというエラーが表示されます。リストボックスもソートされなくなりました。 (ときownerdrawfixedモードで)trueに設定。drawmodeをownerdrawfixedに設定したリストボックス内の項目を選択

Public Class Form1 

    Private Sub Form1_Load(sender As System.Object, e As System.EventArgs) Handles MyBase.Load 
     Dim ac As Integer 
     LstAll.DrawMode = DrawMode.OwnerDrawFixed 
     MaxRec = 708 
     ChkShow = True 

     FileOpen(1, "C:\MyMov3\MovData.mdt", OpenMode.Random, , , Len(Mv3Rec)) 
     For x = 1 To MaxRec 
      FileGet(1, Mv3Rec, x + 1) 

      'This If loop for the colored text 
      If Mv3Rec.Rc3Mlti = True And ChkShwMlti.Checked = True Then 
       ac = Asc(Trim(Mv3Rec.Rc3MTitle)) 
       If ac > 0 Then 
        Dim i As New Item() 
        i.ItmColor = Color.Red 
        i.Txt = Trim(Mv3Rec.Rc3MTitle) 
        LstAll.Items.Add(i) 
       End If 
      End If 

      If ChkShow = True Then 
       Dim i As New Item()    'Needed for the black text when in ownerdrawfixed mode 
       i.ItmColor = Color.Black  'Needed for the black text when in ownerdrawfixed mode 
       i.Txt = Trim(Mv3Rec.Rc3Title) 'Needed for the black text when in ownerdrawfixed mode 
       LstAll.Items.Add(i)    'Needed for the black text when in ownerdrawfixed mode 
       'LstAll.Items.Add(Trim(Mv3Rec.Rc3Title))  'This line adds the text when in normal mode 
      End If 
     Next 
     FileClose(1) 
    End Sub 

    Private Sub LstAll_DrawItem(sender As Object, e As System.Windows.Forms.DrawItemEventArgs) Handles LstAll.DrawItem 
     If e.Index < 0 Then Return 

     Dim i As Item 
     i = TryCast(LstAll.Items(e.Index), Item) 

     If i IsNot Nothing Then 
      e.Graphics.DrawString(i.Txt, e.Font, New SolidBrush(i.ItmColor), e.Bounds) 
     End If 
    End Sub 

    Private Sub LstAll_SelectedIndexChanged(sender As System.Object, e As System.EventArgs) Handles LstAll.SelectedIndexChanged 
     TextBox1.Text = LstAll.SelectedItem 
    End Sub 

    Private Sub Button1_Click(sender As System.Object, e As System.EventArgs) Handles Button1.Click 
     End 
    End Sub 
End Class 

Public Class Item 
    Public Txt As String 
    Public ItmColor As Color 
End Class 

は、このコードは、唯一の重要な部分である....と空白のフォーム上の新しいプロジェクトで試験した。(LstAllに改称)のリストボックス、テキストボックスで、チェックボックス(ChkShwMltiに改名)。これは、私がそれが必要なプログラムと同じエラーを与えます。しかし、構造体を含まないファイルを使用します...しかし、私はあなたがアイデア。

+0

コードのヘルプが必要な場合は、コードを表示する必要があります。私たちは霊能者ではなく、あなたのコンピュータの中には住んでいません。 [質問]を読んで[ツアー] – Plutonix

+0

残念です....ここには必須のコードがあります。問題を示すために新しいプロジェクトで使用されています。 –

+0

これでコードを貼り付けることはできません...それは長すぎると言います –

答えて

0

私はこの問題を解明しました.LstAll.SelectedIndexCh (System.Objectの、System.EventArgsとして電子として送信者)LstAll_SelectedIndexChanged anged

プライベートサブは、必要に応じて

これは働いていたLstAll.SelectedIndexChanged

Dim i As New Item 
    i = LstAll.SelectedItem 
    TextBox1.Text = i.Txt 

End Subのを処理します。

関連する問題