منتدى فيجوال بيسك لكل العرب | منتدى المبرمجين العرب
ما الخطاء فى هذا الكود - نسخة قابلة للطباعة

+- منتدى فيجوال بيسك لكل العرب | منتدى المبرمجين العرب (http://vb4arb.com/vb)
+-- قسم : قسم لغة الفيجوال بيسك VB.NET (http://vb4arb.com/vb/forumdisplay.php?fid=182)
+--- قسم : قسم اسئلة VB.NET (http://vb4arb.com/vb/forumdisplay.php?fid=183)
+--- الموضوع : ما الخطاء فى هذا الكود (/showthread.php?tid=10102)

الصفحات: 1 2


ما الخطاء فى هذا الكود - ali.alfoly - 17-08-13

السلام عليكم ورحمة الله

كود :
[color=#0000FF]Public[/color] [color=#0000FF]Class[/color] [color=#2B91AF]Form[/color]
    [color=#0000FF]Private[/color] [color=#0000FF]Sub[/color][color=#000000] Button1_Click(sender [/color][color=#0000FF]As[/color] [color=#0000FF]Object[/color][color=#000000], e [/color][color=#0000FF]As[/color] [color=#2B91AF]EventArgs[/color][color=#000000]) [/color][color=#0000FF]Handles[/color][color=#000000] Button1.Click[/color]
[color=#000000]        BackgroundWorker1.RunWorkerAsync()[/color]
    [color=#0000FF]End[/color] [color=#0000FF]Sub[/color]

    [color=#0000FF]Private[/color] [color=#0000FF]Sub[/color][color=#000000] BackgroundWorker1_DoWork(sender [/color][color=#0000FF]As[/color] [color=#0000FF]Object[/color][color=#000000], e [/color][color=#0000FF]As[/color][color=#000000] System.ComponentModel.[/color][color=#2B91AF]DoWorkEventArgs[/color][color=#000000]) [/color][color=#0000FF]Handles[/color][color=#000000] BackgroundWorker1.DoWork[/color]
        [color=#0000FF]For[/color][color=#000000] a [/color][color=#0000FF]As[/color] [color=#0000FF]Integer[/color][color=#000000] = 1 [/color][color=#0000FF]To[/color][color=#000000] 1000[/color]
            [color=#0000FF]Dim[/color][color=#000000] lbl [/color][color=#0000FF]As[/color] [color=#0000FF]New[/color] [color=#2B91AF]Label[/color]
[color=#000000]            lbl.Text = [/color][color=#A31515]"kkkkkkkkkkkkkkkkk_"[/color][color=#000000] & a.ToString[/color]
[color=#000000]            FlowLayoutPanel1.Controls.Add(lbl)[/color]
        [color=#0000FF]Next[/color]
    [color=#0000FF]End[/color] [color=#0000FF]Sub[/color]

[color=#0000FF]End[/color] [color=#0000FF]Class[/color]






ما الخطاء فى هذا الكود - سعود - 17-08-13

يوجد سطر يحل الاشكال لكن ليس محبذ
كود :
Control.CheckForIllegalCrossThreadCalls = False



ما الخطاء فى هذا الكود - ali.alfoly - 17-08-13

جزاك الله خير اخى وحبيبى سعود
مش فاهم الكود ومش فاهم تقصد ايه



ما الخطاء فى هذا الكود - AHMED HUSSIEN - 17-08-13

كود :
[color=#0000FF]Public[/color] [color=#0000FF]Class[/color] [color=#2B91AF]Form1[/color]
    [color=#0000FF]Private[/color] [color=#0000FF]Delegate[/color] [color=#0000FF]Sub[/color] [color=#2B91AF]AddControlSafe[/color][color=#000000](c [/color][color=#0000FF]As[/color] [color=#2B91AF]Control[/color][color=#000000])[/color]

    [color=#0000FF]Private[/color] [color=#0000FF]Sub[/color][color=#000000] Form1_Load(sender [/color][color=#0000FF]As[/color] [color=#0000FF]Object[/color][color=#000000], e [/color][color=#0000FF]As[/color] [color=#2B91AF]EventArgs[/color][color=#000000]) [/color][color=#0000FF]Handles[/color] [color=#0000FF]MyBase[/color][color=#000000].Load[/color]
[color=#000000]        FlowLayoutPanel1.AutoScroll = [/color][color=#0000FF]True[/color]
[color=#000000]        BGW.RunWorkerAsync()[/color]
    [color=#0000FF]End[/color] [color=#0000FF]Sub[/color]

    [color=#0000FF]Private[/color] [color=#0000FF]Sub[/color][color=#000000] BGW_DoWork(sender [/color][color=#0000FF]As[/color] [color=#0000FF]Object[/color][color=#000000], e [/color][color=#0000FF]As[/color] [color=#2B91AF]DoWorkEventArgs[/color][color=#000000]) [/color][color=#0000FF]Handles[/color][color=#000000] BGW.DoWork[/color]
        [color=#0000FF]Dim[/color][color=#000000] [delegate] [/color][color=#0000FF]As[/color] [color=#0000FF]New[/color] [color=#2B91AF]AddControlSafe[/color][color=#000000]([/color][color=#0000FF]Sub[/color][color=#000000](c [/color][color=#0000FF]As[/color] [color=#2B91AF]Control[/color][color=#000000])[/color]
[color=#000000]                                                 FlowLayoutPanel1.Controls.Add(c)[/color]
                                             [color=#0000FF]End[/color] [color=#0000FF]Sub[/color][color=#000000])[/color]
        [color=#0000FF]For[/color][color=#000000] a [/color][color=#0000FF]As[/color] [color=#0000FF]Integer[/color][color=#000000] = 1 [/color][color=#0000FF]To[/color][color=#000000] 1000[/color]
            [color=#0000FF]Dim[/color][color=#000000] lbl [/color][color=#0000FF]As[/color] [color=#0000FF]New[/color] [color=#2B91AF]Label[/color]
[color=#000000]            lbl.Text = [/color][color=#A31515]"kkkk_"[/color][color=#000000] & a[/color]
[color=#000000]            Invoke([delegate], lbl)[/color]
        [color=#0000FF]Next[/color]
    [color=#0000FF]End[/color] [color=#0000FF]Sub[/color]
[color=#0000FF]End[/color] [color=#0000FF]Class[/color]



ما الخطاء فى هذا الكود - ali.alfoly - 17-08-13

جزاك الله خير اخى احمد لاكن هذا الكود جديد عليا فعلا
ارجو من حدرتك شرح الاسطر التى تسبقها علامة ( " )

كود :
[color=#0000FF]Public[/color] [color=#0000FF]Class[/color] [color=#2B91AF]Form1[/color]

    [color=#008000]'[/color]
    [color=#0000FF]Private[/color] [color=#0000FF]Delegate[/color] [color=#0000FF]Sub[/color] [color=#2B91AF]AddControlSafe[/color][color=#000000](c [/color][color=#0000FF]As[/color] [color=#2B91AF]Control[/color][color=#000000])[/color]

    [color=#0000FF]Private[/color] [color=#0000FF]Sub[/color][color=#000000] Form1_Load(sender [/color][color=#0000FF]As[/color] [color=#0000FF]Object[/color][color=#000000], e [/color][color=#0000FF]As[/color] [color=#2B91AF]EventArgs[/color][color=#000000]) [/color][color=#0000FF]Handles[/color] [color=#0000FF]MyBase[/color][color=#000000].Load[/color]
[color=#000000]        FlowLayoutPanel1.AutoScroll = [/color][color=#0000FF]True[/color]
[color=#000000]        BGW.RunWorkerAsync()[/color]
    [color=#0000FF]End[/color] [color=#0000FF]Sub[/color]

    [color=#0000FF]Private[/color] [color=#0000FF]Sub[/color][color=#000000] BGW_DoWork(sender [/color][color=#0000FF]As[/color] [color=#0000FF]Object[/color][color=#000000], e [/color][color=#0000FF]As[/color][color=#000000] System.ComponentModel.[/color][color=#2B91AF]DoWorkEventArgs[/color][color=#000000]) [/color][color=#0000FF]Handles[/color][color=#000000] BGW.DoWork[/color]

        [color=#008000]'[/color]
        [color=#0000FF]Dim[/color][color=#000000] [delegate] [/color][color=#0000FF]As[/color] [color=#0000FF]New[/color] [color=#2B91AF]AddControlSafe[/color][color=#000000]([/color][color=#0000FF]Sub[/color][color=#000000](c [/color][color=#0000FF]As[/color] [color=#2B91AF]Control[/color][color=#000000])[/color]
[color=#000000]                                                 FlowLayoutPanel1.Controls.Add(c)[/color]
                                             [color=#0000FF]End[/color] [color=#0000FF]Sub[/color][color=#000000])[/color]

        [color=#0000FF]For[/color][color=#000000] a [/color][color=#0000FF]As[/color] [color=#0000FF]Integer[/color][color=#000000] = 1 [/color][color=#0000FF]To[/color][color=#000000] 1000[/color]
            [color=#0000FF]Dim[/color][color=#000000] lbl [/color][color=#0000FF]As[/color] [color=#0000FF]New[/color] [color=#2B91AF]Label[/color]
[color=#000000]            lbl.Text = [/color][color=#A31515]"kkkk_"[/color][color=#000000] & a[/color]
            [color=#008000]'[/color]
[color=#000000]            Invoke([delegate], lbl)[/color]
        [color=#0000FF]Next[/color]
    [color=#0000FF]End[/color] [color=#0000FF]Sub[/color]
[color=#0000FF]End[/color] [color=#0000FF]Class[/color]



ما الخطاء فى هذا الكود - الشاكي لله - 17-08-13

عندما تريد الوصول الى الفورم من thread اخر

لغات الدوت نت تمنع ذلك لاسباب ...... نسيت ههههه


المهم

عند اي كود تستخدمه للوصول الى الفورم

استخدم التفويض + invoke

طريقتي فيها لف ودوران شوي

ولذلك استعمل طريقة اخي سجاد :

PHP كود :
If (Me.InvokeRequiredThen
            Me
.Invoke(New MethodInvoker(Sub()
                                            
FlowLayoutPanel1.Controls.Add(lbl)
                                        
End Sub))
        
End If 

خلاص انحلت


ما الخطاء فى هذا الكود - الشاكي لله - 17-08-13

اسف اخي ahmed hussien لم ارى ردك


ما الخطاء فى هذا الكود - AHMED HUSSIEN - 17-08-13

الشاكي لله كتب :اسف اخي ahmed hussien لم ارى ردك

لا توجد مشكلة

ali.alfoly كتب :جزاك الله خير اخى احمد لاكن هذا الكود جديد عليا فعلا
ارجو من حدرتك شرح الاسطر التى تسبقها علامة ( " )

اسف اخى ليس لدى معلومات وافية عن Delegates & MethodInvoker
انا استخدمها عندما تظهر لي رسالة مثل التى ظهرت لك

لذلك ارجوا من احد الأخوة ان يتكرم بوضع بشرح عنها


ما الخطاء فى هذا الكود - الشاكي لله - 17-08-13

لايمكنك التعامل مع الCotrols الا من الThread الذي أنشأها

فعندما تستخدم background worker فإنك تستخدم simi-thread

وبطيعة الحالة سيتم منعك من التعامل مع الادوات لأنك لم تنشأها من الsimi-thread

لايوجد سبب واضح لفعل لمنع المستخدم من الوصول الى الادوات

ولكن مايكروسوفت تحب الsafty ، فقررت عدم السماح لأي ثريد بالوصول الى الادوات المنشئة في ثريد اخر (ربما لاجل التنظيم في stuck تنفيذ الاوامر ..)

وهكذا لايمكنك الوصول لها إلا باستعمال الاستدعاء المباشر (invoke)

فهو يقوم بتنفيذ الكود على الاداة دون نقلها الى مكدسة الترتيب

فالكود العادي دون invoke (مثلا تغيير خلفية الفورم) ، لايتم تنفيذه مباشرة

بل يتم نقله الى مكدسة خاصة منظمة تعمل على تنفيذ هذا الكود عندما يتم يحين دوره


اعتقد ان invoke تستعمل دالة API المسمى sendMessage لإرسال الكود

ولكن وجب التنبيه على ضرورة استخدام invokeRequired قبل كود invoke للتأكد

لأن هناك مشكلة قد تحدث عندما تستخدم invoke وانت لست بحاجة له



ما الخطاء فى هذا الكود - ali.alfoly - 17-08-13

جزاك الله خير
توضيح وافى جدا

طيب انا عملت UserControl1 ووضعت عليه مجموعة من الادوات منها RichTextBox1

وقمت بعمل نسخ منها فى التكرار يظهر خطاء

كود :
[color=#0000FF]Private[/color] [color=#0000FF]Sub[/color][color=#000000] BGW_DoWork(sender [/color][color=#0000FF]As[/color] [color=#0000FF]Object[/color][color=#000000], e [/color][color=#0000FF]As[/color][color=#000000] System.ComponentModel.[/color][color=#2B91AF]DoWorkEventArgs[/color][color=#000000]) [/color][color=#0000FF]Handles[/color][color=#000000] BGW.DoWork[/color]

        [color=#0000FF]For[/color][color=#000000] a [/color][color=#0000FF]As[/color] [color=#0000FF]Integer[/color][color=#000000] = 1 [/color][color=#0000FF]To[/color][color=#000000] 1000[/color]
            [color=#0000FF]Dim[/color][color=#000000] Usr [/color][color=#0000FF]As[/color] [color=#0000FF]New[/color] [color=#2B91AF]UserControl1[/color]
[color=#000000]            Usr.RichTextBox1.Rtf = [/color][color=#A31515]"kkkk_"[/color][color=#000000] & a[/color]
            [color=#008000]'[/color]

            [color=#0000FF]If[/color][color=#000000] ([/color][color=#0000FF]Me[/color][color=#000000].InvokeRequired) [/color][color=#0000FF]Then[/color]
                [color=#0000FF]Me[/color][color=#000000].Invoke([/color][color=#0000FF]New[/color] [color=#2B91AF]MethodInvoker[/color][color=#000000]([/color][color=#0000FF]Sub[/color][color=#000000]()[/color]
[color=#000000]                                                FlowLayoutPanel1.Controls.Add(Usr)[/color]
                                            [color=#0000FF]End[/color] [color=#0000FF]Sub[/color][color=#000000]))[/color]
            [color=#0000FF]End[/color] [color=#0000FF]If[/color]
        [color=#0000FF]Next[/color]

    [color=#0000FF]End[/color] [color=#0000FF]Sub[/color]