منتدى فيجوال بيسك لكل العرب | منتدى المبرمجين العرب
[VB.NET] تغيير لون بعض Items فى Combobox بناء على اختيارات Combobox آخر - نسخة قابلة للطباعة

+- منتدى فيجوال بيسك لكل العرب | منتدى المبرمجين العرب (https://vb4arb.com/vb)
+-- قسم : قسم لغة الفيجوال بيسك VB.NET (https://vb4arb.com/vb/forumdisplay.php?fid=182)
+--- قسم : قسم اسئلة VB.NET (https://vb4arb.com/vb/forumdisplay.php?fid=183)
+--- الموضوع : [VB.NET] تغيير لون بعض Items فى Combobox بناء على اختيارات Combobox آخر (/showthread.php?tid=34177)



تغيير لون بعض Items فى Combobox بناء على اختيارات Combobox آخر - Doctor GME - 05-04-20

هذه هى واجهة البرنامج

[صورة مرفقة: 769597835.jpg]

كل Combobox من الأربعة السفلى يعتمد على اختيار ما قبله
ما أريده هو أنه عندما يتم اخيار Available فى Combobox المسمى Status كما بالصورة

[صورة مرفقة: 182870544.jpg]

يتغير لون items فى Combobox المسمى Name والتى يكون مسجلاً أمامها Yes
فى قاعدة البيانات فى خانة Available كما بالصورة

[صورة مرفقة: 118244816.jpg]

البرنامج بالمرفقات
وهذا هو كود البرنامج لمن لا يتمكن من التحميل:
كود :
Imports System.Data.OleDb
Public Class Form1
   Dim cnn As New OleDbConnection("Provider=Microsoft.ACE.OLEDB.12.0;Data Source=Stock.accdb")
   Dim da As OleDbDataAdapter
   Dim cm As OleDbCommandBuilder
   Dim cmd As OleDbCommand
   Dim itemRoute As String()
   Private Sub ComboType_SelectedIndexChanged(sender As Object, e As EventArgs) Handles ComboType.SelectedIndexChanged

       ComboName.Items.Clear()
       ComboQuantity.Items.Clear()
       ComboStore.Items.Clear()

       If ComboType.SelectedItem = "Food" Then

           Dim dt1 As New DataTable
           dt1.Clear()
           Dim sql As String = "SELECT * FROM Food"
           da = New OleDbDataAdapter(sql, cnn)
           cm = New OleDbCommandBuilder(da)
           da.Fill(dt1)
           For ii As Integer = 0 To dt1.Rows.Count - 1
               ComboName.Items.Add(dt1(ii)(0))
           Next

       End If

       If ComboType.SelectedItem = "Clothes" Then

           Dim dt1 As New DataTable
           dt1.Clear()
           Dim sql As String = "SELECT * FROM Clothes"
           da = New OleDbDataAdapter(sql, cnn)
           cm = New OleDbCommandBuilder(da)
           da.Fill(dt1)
           For ii As Integer = 0 To dt1.Rows.Count - 1
               ComboName.Items.Add(dt1(ii)(0))
           Next

       End If
   End Sub

   Private Sub ComboName_SelectedIndexChanged(sender As Object, e As EventArgs) Handles ComboName.SelectedIndexChanged

       ComboQuantity.Items.Clear()
       ComboStore.Items.Clear()

       If ComboType.SelectedItem = ("Food") Then

           Dim dt2 As New DataTable
           dt2.Clear()
           Dim sql2 As String = "SELECT * FROM Food WHERE Food = '" & ComboName.SelectedItem & "'"
           da = New OleDbDataAdapter(sql2, cnn)
           cm = New OleDbCommandBuilder(da)
           da.Fill(dt2)
           Dim quants As String = dt2(0)(1)
           Dim quant As String() = quants.Split("-")
           For ii As Integer = 0 To quant.Count - 1
               ComboQuantity.Items.Add(quant(ii))
           Next
           Dim stores As String = dt2(0)(2)
           Dim store As String() = stores.Split("-")
           itemRoute = store

       End If

       If ComboType.SelectedItem = ("Clothes") Then

           Dim dt2 As New DataTable
           dt2.Clear()
           Dim sql2 As String = "SELECT * FROM Clothes WHERE Clothes = '" & ComboName.SelectedItem & "'"
           da = New OleDbDataAdapter(sql2, cnn)
           cm = New OleDbCommandBuilder(da)
           da.Fill(dt2)
           Dim quants As String = dt2(0)(1)
           Dim quant As String() = quants.Split("-")
           For ii As Integer = 0 To quant.Count - 1
               ComboQuantity.Items.Add(quant(ii))
           Next
           Dim stores As String = dt2(0)(2)
           Dim store As String() = stores.Split("-")
           itemRoute = store

       End If

   End Sub

   Private Sub ComboQuantity_SelectedIndexChanged(sender As Object, e As EventArgs) Handles ComboQuantity.SelectedIndexChanged

       ComboStore.Items.Clear()
       ComboStore.Items.Add(itemRoute(ComboQuantity.SelectedIndex))

   End Sub
End Class



RE: تغيير لون بعض Items فى Combobox بناء على اختيارات Combobox آخر - asemshahen5 - 11-04-20

Display Colors in ComboBox from aRGB Value item


RE: تغيير لون بعض Items فى Combobox بناء على اختيارات Combobox آخر - Doctor GME - 12-04-20

حاولت وتوصلت لهذا الكود:

كود :
Private Sub ComboName_DrawItem(sender As Object, e As DrawItemEventArgs) Handles ComboName.DrawItem

        If e.Index = -1 Then Return

        Dim myFont As Font = New Font("times new roman", 10, FontStyle.Regular)
        Dim mycolor As New Color
        Dim myBrush As Brush = Brushes.Black
        Dim rect As Rectangle = New Rectangle(0, e.Bounds.Top, e.Bounds.Width - 1, e.Bounds.Height - 1)

        e.DrawBackground()
        e.DrawFocusRectangle()

        Select Case ComboName.Items(e.Index).ToString
            Case "GOOD"
                mycolor = Color.Pink
            Case Else
                mycolor = Color.White
        End Select

        If e.State = DrawItemState.Selected Then
            myBrush = Brushes.Red
        Else
            myBrush = Brushes.Black
        End If

        e.Graphics.DrawRectangle(New Pen(mycolor), rect)
        e.Graphics.FillRectangle(New SolidBrush(mycolor), rect)
        rect.Inflate(1, 1)
        e.Graphics.DrawString(ComboName.Items(e.Index).ToString(), myFont, myBrush, e.Bounds, StringFormat.GenericDefault)

    End Sub

ولكن الخلفية دائماً (بيضاء) والنص (أسود) لكل items وأنا لا أعرف كيفية تفعيل "case "GOOD لتغييره
وبعدها ربط قاعدة البيانات به كما ذكرت


RE: تغيير لون بعض Items فى Combobox بناء على اختيارات Combobox آخر - Doctor GME - 14-04-20

لتسهيل الفكرة هذا هو تصميم برنامجى وكل combobox اسمه فى design مكتوب بالأحمر:

[صورة مرفقة: 448723784.jpg]

كما أننى حاولت تعديل كود Drawitem ووصلت للتالى:

كود :
   Private Sub ComboName_DrawItem(sender As Object, e As DrawItemEventArgs) Handles ComboName.DrawItem

       If e.Index = -1 Then Return

       e.DrawBackground()

       Dim item = DirectCast(ComboName.Items(e.Index), DataRowView)
       'Anothe Failed Line:
       'Dim item As DataRowView = CType(ComboName.Items(e.Index), DataRowView)

       Dim text = ComboName.GetItemText(item)
       Dim available = CBool(item("Available"))

       Using brush As New SolidBrush(If(available, Color.Red, e.ForeColor))
           e.Graphics.DrawString(text, e.Font, brush, e.Bounds)
       End Using

   End Sub

ولكنى لم أستطع ربط drawitem event بقاعدة البيانات وتعديل الكود الخاص بذلك


RE: تغيير لون بعض Items فى Combobox بناء على اختيارات Combobox آخر - Doctor GME - 17-04-20

upppppppppppppppppppppppppppp