تقييم الموضوع :
  • 0 أصوات - بمعدل 0
  • 1
  • 2
  • 3
  • 4
  • 5
[VB.NET] تغيير لون بعض Items فى Combobox بناء على اختيارات Combobox آخر
#1
Lightbulb 
هذه هى واجهة البرنامج

[صورة مرفقة: 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


الملفات المرفقة
.rar   Store.rar (الحجم : 81.78 ك ب / التحميلات : 41)
الرد }}}
تم الشكر بواسطة:
#2
Display Colors in ComboBox from aRGB Value item
الرد }}}
تم الشكر بواسطة: معاند الحظ , ابراهيم ايبو
#3
حاولت وتوصلت لهذا الكود:

كود :
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 لتغييره
وبعدها ربط قاعدة البيانات به كما ذكرت
الرد }}}
تم الشكر بواسطة: ابراهيم ايبو
#4
لتسهيل الفكرة هذا هو تصميم برنامجى وكل 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 بقاعدة البيانات وتعديل الكود الخاص بذلك
الرد }}}
تم الشكر بواسطة: ابراهيم ايبو
#5
upppppppppppppppppppppppppppp
الرد }}}
تم الشكر بواسطة: ابراهيم ايبو


المواضيع المحتمل أن تكون متشابهة .
الموضوع : الكاتب الردود : المشاهدات : آخر رد
  [سؤال] طريقة توسيط النص داخل اداة comboBox سمير1404 7 4,222 24-08-25, 01:01 PM
آخر رد: أبو خالد الشكري
  جلب القسم بناء على قيمة مصمم هاوي 2 585 22-04-25, 08:38 PM
آخر رد: princelovelorn
  [سؤال] تغيير الفورم الرئيسي عند تشغيل البرنامج في Visual Studio مع .NET 8؟ silverlord 2 852 09-03-25, 03:52 AM
آخر رد: silverlord
  [كود] كود تغيير حجم النص في التكست بوكس hassan 8 9,199 30-01-25, 02:33 AM
آخر رد: خالد كامل1
  كيفية احتساب الفرق بين تاريخين بناء على عدد معين مصمم هاوي 2 762 15-01-25, 02:02 PM
آخر رد: مصمم هاوي
  تغيير أسم ملف DOX.1 3 3,436 01-01-25, 09:37 PM
آخر رد: anes
  تغيير مكان حفظ الصورة من قاعدة البيانات إلى مجلد في مسار البرنامج F.H.M 37 3,545 05-11-24, 08:30 AM
آخر رد: F.H.M
  تغيير اللون تلقائياً عند إقتراب نهاية العقد F.H.M 2 643 25-10-24, 07:16 AM
آخر رد: F.H.M
  كيف أضيف المواد في ComboBox إلى ComboBox آخر في فورم آخر F.H.M 13 1,354 25-09-24, 11:05 PM
آخر رد: Taha Okla
Question ممكن كود تغيير حجم Form بالكود الورد الصناعي 2 622 13-08-24, 10:10 AM
آخر رد: الورد الصناعي

التنقل السريع :


يقوم بقرائة الموضوع: