تغيير لون بعض Items فى Combobox بناء على اختيارات Combobox آخر - Doctor GME - 05-04-20
هذه هى واجهة البرنامج
كل Combobox من الأربعة السفلى يعتمد على اختيار ما قبله
ما أريده هو أنه عندما يتم اخيار Available فى Combobox المسمى Status كما بالصورة
يتغير لون items فى Combobox المسمى Name والتى يكون مسجلاً أمامها Yes
فى قاعدة البيانات فى خانة Available كما بالصورة
البرنامج بالمرفقات
وهذا هو كود البرنامج لمن لا يتمكن من التحميل:
كود :
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 مكتوب بالأحمر:
كما أننى حاولت تعديل كود 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
|