تغيير لون بعض Items فى Combobox بناء على اختيارات Combobox آخر - Doctor GME - 05-04-20
هذه هى واجهة البرنامج
![[صورة مرفقة: 769597835.jpg]](https://www5.0zz0.com/2020/04/05/13/769597835.jpg)
كل Combobox من الأربعة السفلى يعتمد على اختيار ما قبله
ما أريده هو أنه عندما يتم اخيار Available فى Combobox المسمى Status كما بالصورة
![[صورة مرفقة: 182870544.jpg]](https://www5.0zz0.com/2020/04/05/13/182870544.jpg)
يتغير لون items فى Combobox المسمى Name والتى يكون مسجلاً أمامها Yes
فى قاعدة البيانات فى خانة Available كما بالصورة
![[صورة مرفقة: 118244816.jpg]](https://www7.0zz0.com/2020/04/05/13/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]](https://www5.0zz0.com/2020/04/12/21/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
|