تقييم الموضوع :
  • 0 أصوات - بمعدل 0
  • 1
  • 2
  • 3
  • 4
  • 5
[سؤال] كيف اتعامل مع button تم انشاؤه بالكود؟؟
#1
السلام عليكم ورحمة الله وبركاته

اخوتي عندي سؤال

كيف يمكنني ان اتعامل مع الاحداث للادوات التي يتم انشاءها بالكود؟؟

يعني مثال مبسط حتى تصل الفكرة

لو انشأت زر Button في وضع اللود للفورم


كود :
Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
       Dim btn As New Button
       Me.Controls.Add(btn)

End Sub

الان ابي اتعامل مع البوتن اللي انشأته كيف؟؟؟
يعني ابي اوصل للاحداث Events - ابي اغير خصائصه properties

ولكم شكري مقدما
الرد }}}
تم الشكر بواسطة:
#2
السلام عليكم

اولا قومي بتعريف ال Button في الكلاس وليس داخل حدث ومنها تستطيعي التحكم به بشكل حامل وهذا مثال
كود :
Dim btn As Button

Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
    btn = New Button
    btn.Text = "الزر الأول"
    btn.Location = New Point(10, 10)
    AddHandler btn.Click, AddressOf btn_Click
    Me.Controls.Add(btn)

    btn = New Button
    btn.Text = "الزر الثاني"
    btn.Location = New Point(10, 40)
    AddHandler btn.Click, AddressOf btn_Click
    Me.Controls.Add(btn)

End Sub

Private Sub btn_Click(sender As System.Object, e As System.EventArgs)
    ' حدث النقر
    MsgBox(sender.Text)
End Sub
الرد }}}
#3
جميل جداً
لكن واجهتني مشكلة وهي ان الاداة button يتم توليدها أثناء تشغيل البرنامج بواسطة جملة for فكيف أكتب الأوامر داخل الحدث click للاداة؟؟
الرد }}}
تم الشكر بواسطة:
#4
في الحدث الخاص بالباتون عليك أن تحدد الباتون الذي سيؤدي الوظيفة

PHP كود :
Private Sub Form1_Load(sender As ObjectAs EventArgsHandles MyBase.Load
        Dim btn 
As Button = New Button
        With btn
            
.Text "Any Text"
 
           .Location = New Point(1010)
 
       End With
        AddHandler btn
.ClickAddressOf Btn_Click
        Me
.Controls.Add(btn)
 
   End Sub

    Private Sub Btn_Click
(sender As ObjectAs EventArgs)
 
       ' اكتب ما تريده في الحدث

        Dim b As Button = CType(sender, Button)
        Select Case b.Text
            Case "Any Text"
                Me.Close()

        End Select

    End Sub 
الرد }}}
#5
(31-01-17, 12:18 AM)silverlight كتب : في الحدث الخاص بالباتون عليك أن تحدد الباتون الذي سيؤدي الوظيفة

PHP كود :
Private Sub Form1_Load(sender As ObjectAs EventArgsHandles MyBase.Load
        Dim btn 
As Button = New Button
        With btn
            
.Text "Any Text"
 
           .Location = New Point(1010)
 
       End With
        AddHandler btn
.ClickAddressOf Btn_Click
        Me
.Controls.Add(btn)
 
   End Sub

    Private Sub Btn_Click
(sender As ObjectAs EventArgs)
 
       ' اكتب ما تريده في الحدث

        Dim b As Button = CType(sender, Button)
        Select Case b.Text
            Case "Any Text"
                Me.Close()

        End Select

    End Sub 

انا اقصد لما يكون توليد البوتون بجملة فور
يعني لو عملت جملة فور تولد 5 بوتون
كيف اكتب الاوامر حق الحدث لكل بوتون؟؟
الرد }}}
تم الشكر بواسطة:
#6
(31-01-17, 12:51 AM)اليوم مبتدئة وغداً محترفة كتب : انا اقصد لما يكون توليد البوتون بجملة فور
يعني لو عملت جملة فور تولد 5 بوتون
كيف اكتب الاوامر حق الحدث لكل بوتون؟؟

معذرتا للتدخل
كود :
 Dim b As Button = CType(sender, Button)
       Select Case b.Text
           Case "Any Text"
               Me.Hide()



       End Select
       Select Case b.Text
           Case "Any Text1"
               Me.Close()


       End Select
اظن هكذا يتم التمييز بين الازرار
الرد }}}
#7
PHP كود :
 Private Sub Form1_Load(sender As ObjectAs EventArgsHandles MyBase.Load
        Dim pt 
As Point = New Point(1010)
 
       For i As Integer 0 To 5
            Dim btn 
As Button = New Button
            With btn
                btn
.Location pt
                btn
.Text "button" & (1).ToString
                
' إضبط خصائص الباتون كيفما شئت
            End With
            ' 
هنا يتم ضبط مكان كل باتون
            pt
.+= btn.Height 1
            Me
.Controls.Add(btn)
 
       Next

        
' هنا نضيف الحدث لكل باتون
        For Each b As Button In Me.Controls
            AddHandler b.Click, AddressOf Btn_Click
        Next

    End Sub

    Private Sub Btn_Click(sender As Object, e As EventArgs)
        ' 
اكتب ما تريده في الحدث

        
' هنا نختار الباتون بناء علي التكست الخاص به
        ' 
ثم نحدد ما يجب أن يحدث عند الضغط علي الباتون
        Dim b 
As Button CType(senderButton)
 
       Select Case b.Text
            Case 
"button1"
 
               Me.Close()
 
           Case "button2"
 
               Me.BackColor Color.Blue
            Case 
"button3"
 
               Me.Text "any text"
 
           Case "button4"

 
           Case "button5"

 
           Case "button6"

 
       End Select

    End Sub 
الرد }}}
#8
جدا جدا جميل

بس باقي مشكلة وهي اني اريد في جملة select case يتم توليد الحالات بعدد البوتونات اللي تم توليدها بجملة for وبنفس الاسماء لان جملة فور عندي ليست من 1 الى 5 بل تقوم بجلب سجلات من قاعدة بيانات
انا الشغل مضبوط معاي بس باقي توليد الكيسات بعدد البوتونات التي تم توليدها في جملة for وبنفس الاسماء
الرد }}}
تم الشكر بواسطة:
#9
ضعي مشروعك.
الرد }}}
#10
هذا البرنامج بعد التعديل حسب تعليمات الاخوة اللي ردو 
أول شي جملة الفور

كود :
For a As Integer = 0 To ds.Tables("ccc").Rows.Count - 1

           Dim flp As New FlowLayoutPanel
           flp.Name = "flpHead" + ds.Tables("ccc").Rows(a).Item("Type_Info_id").ToString
           flp.FlowDirection = FlowDirection.LeftToRight
           flp.AutoSize = True
           flp.AutoSizeMode = Windows.Forms.AutoSizeMode.GrowAndShrink
           flph.Controls.Add(flp)
           Dim lbl As New Label
           lbl.Name = "lbl" + ds.Tables("ccc").Rows(a).Item("Type_Info_id").ToString
           lbl.Text = ds.Tables("ccc").Rows(a).Item("Type_Info_name").ToString
           flp.Controls.Add(lbl)
           Dim pic As New PictureBox
           pic.Name = "pic" + ds.Tables("ccc").Rows(a).Item("Type_Info_id").ToString
           pic.Size = New Size(20, 20)
           pic.SizeMode = PictureBoxSizeMode.StretchImage
           pic.Image = Image.FromFile("D:\Users\dell\pic\reals.jpg")
           AddHandler pic.Click, AddressOf pic_click
           flp.Controls.Add(pic)
       Next

طبعا الاداة المعنية في سؤالي هي picturebox

ثانيا الحدث Click للأداة picturebox

كود :
Private Sub pic_click(sender As Object, e As EventArgs)

       Dim b As PictureBox = CType(sender, PictureBox)


       Select Case b.Name

           Case "pic" + ds.Tables("ccc").Rows(0).Item("Type_Info_id").ToString
               MsgBox("010")
           Case "pic" + ds.Tables("ccc").Rows(1).Item("Type_Info_id").ToString
               MsgBox("020")
           Case "pic" + ds.Tables("ccc").Rows(2).Item("Type_Info_id").ToString
               MsgBox("030")
           Case "pic" + ds.Tables("ccc").Rows(3).Item("Type_Info_id").ToString
               MsgBox("040")
           Case "pic" + ds.Tables("ccc").Rows(4).Item("Type_Info_id").ToString
               MsgBox("050")
       End Select




   End Sub

هنا عملت الكيسات يدوي بس انا ابغاه يعملها تلقائي لأن عددها مو معروف
الرد }}}
تم الشكر بواسطة:



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


يقوم بقرائة الموضوع: بالاضافة الى ( 1 ) ضيف كريم