منتدى فيجوال بيسك لكل العرب | منتدى المبرمجين العرب

نسخة كاملة : [تطبيق شامل] {11} - واجهة Smart صناعة الـ Donut Chart
أنت حالياً تتصفح نسخة خفيفة من المنتدى . مشاهدة نسخة كاملة مع جميع الأشكال الجمالية .
الصفحات : 1 2
السلام عليكم ورحمة الله وبركاته ..


الدرس السابق :


[تطبيق شامل] {10} - واجهة Smart




مشاهدة




https://www.youtube.com/watch?v=-KdRQXkZnMs


اضافة NasteIn
https://marketplace.visualstudio.com/items?itemName=JoseRomaniello.NestIn
درس دسم للغاية، شاهدته مراراً وطبقت معك خطوة بخطوة ولكن صادفتني مشكلتين
الأولى:
حولت الكود التالي :
PHP كود :
root.Children.Cast<UIElement>.Where(=> e.GetType() == typeof(Arc)).ToList().ForEach(=> root.Children.Remove(e)); 

إلى VB.net فلم ينجح وظهر معي خطأ:
PHP كود :
root.Children.Cast(Of UIElement).Where(Function(ee.GetType() Is GetType(Arc)).ToList().ForEach(Function(eroot.Children.Remove(e)) 


فما الكود الصحيح ؟
المشكلة الثانية سآتي إليها بعد أن تتكرم وتجيبني على هذا الاستفسار
(13-04-17, 12:32 AM)السندبااد كتب : [ -> ]
درس دسم للغاية، شاهدته مراراً وطبقت معك خطوة بخطوة ولكن صادفتني مشكلتين
الأولى:
حولت الكود التالي :
PHP كود :
root.Children.Cast<UIElement>.Where(=> e.GetType() == typeof(Arc)).ToList().ForEach(=> root.Children.Remove(e)); 

إلى VB.net فلم ينجح وظهر معي خطأ:
PHP كود :
root.Children.Cast(Of UIElement).Where(Function(ee.GetType() Is GetType(Arc)).ToList().ForEach(Function(eroot.Children.Remove(e)) 


فما الكود الصحيح ؟
المشكلة الثانية سآتي إليها بعد أن تتكرم وتجيبني على هذا الاستفسار

نظريا ـ يجب ان يكون شرط الـ where هكذا

(e.GetType() = GetType(Arc

بعتبار ان Is ماتصلح لانها CompiledTime والـ Cast عندنا يساوي UIElement فلن يكون الشرط صحيحا 
أخي العزيز لم يتم حل المشكلة ففي السطر السابق يظهر خطأ هنا:
PHP كود :
root.Children.Remove(e)) 

البرنامج في المرفقات
أرجو التكرم بالاطلاع عليه والمساعدة في حل المشكلة
الحمد لله اكتشفت الخطأ:
[attachment=13869]

والكود بعد التصحيح:
PHP كود :
root.Children.Cast(Of UIElement)().Where(Function(ee.GetType() = GetType(Arc)).ToList().ForEach(Sub(eroot.Children.Remove(e)) 

والآن السؤال الذي يطرح نفسه:
أنت قمت بإضافة Arc للأداة في النافذة عن طريق Dialog
[attachment=13870]

والسؤال:
كيف ممكن عن طريق الكود بيهاند أضيف ذلك في حدث كليك لزر ما مثلاً، أو في حدث اللود للنافذة
؟!؟!؟
(14-04-17, 12:14 AM)السندبااد كتب : [ -> ]
الحمد لله اكتشفت الخطأ:

والكود بعد التصحيح:
PHP كود :
root.Children.Cast(Of UIElement)().Where(Function(ee.GetType() = GetType(Arc)).ToList().ForEach(Sub(eroot.Children.Remove(e)) 

والآن السؤال الذي يطرح نفسه:
أنت قمت بإضافة Arc للأداة في النافذة عن طريق Dialog


والسؤال:
كيف ممكن عن طريق الكود بيهاند أضيف ذلك في حدث كليك لزر ما مثلاً، أو في حدث اللود للنافذة
؟!؟!؟



اولا: نعطي Name للـ GeneralBorder الحاضن للـ DonutChart




ثانيا: الوصول الى الـ Conent تبعه من خلال الكود :
PHP كود :
       //DashboardPage.cs
 
       private void UserControl_Loaded(object senderRoutedEventArgs e)
 
       {

 
           DonutChart chart = ((Grid)chartGeneralBorder.ContentObject).Children.Cast<FrameworkElement>()
 
                               .Where(=> a.GetType() == typeof(DonutChart)).Single() as DonutChart;

 
           chart.Categories.Add(new Usercontrols.DonutCategory()
 
           {
 
               Name "Visits",
 
               Color = new SolidColorBrush((Color)ColorConverter.ConvertFromString("#FF60C6CF")),
 
               Percent 40
            
});
 
           chart.Categories.Add(new Usercontrols.DonutCategory()
 
           {
 
               Name "Members",
 
               Color = new SolidColorBrush((Color)ColorConverter.ConvertFromString("#FF989CFF")),
 
               Percent 25
            
});
 
           chart.Categories.Add(new Usercontrols.DonutCategory()
 
           {
 
               Name "Sales",
 
               Color = new SolidColorBrush((Color)ColorConverter.ConvertFromString("#FF59C5A0")),
 
               Percent 23
            
});
 
           chart.Categories.Add(new Usercontrols.DonutCategory()
 
           {
 
               Name "Lose",
 
               Color = new SolidColorBrush((Color)ColorConverter.ConvertFromString("#FFF35958")),
 
               Percent 12
            
});
 
       

هذا احد الاساليب .

اما الطريقة المرنة هي باستعمال الـ Binding للـ Categories Property واساندها لـ ViewModel وهذا مايسمى بنمط MVVM Smile
تم تنفيذ الكود الذي وضعته وبالفعل تمت العملية بنجاح ولكن لاحظت أنه لم يتم مسح الـ Arc السابقة، بل تم إضافة الـ Arc الجديدة فوقها كما تشاهد:
[attachment=13873]

وأنت ذكرت أنه يجب أن يتم المسح حسب الكود الذي أضفناه في الـ Draw
[attachment=13875]
الملف بالمرفقات كي تشاهد على الواقع
[attachment=13874]

أظن أن الحل أن نضيف هذا الكود في زر التحديث، فقد جربته ونجحت العملية:

PHP كود :
PieChart.categories.Clear() 


Wink
يبدو انك نسيت ان تحذف الـ Categories السابقين

فانت اضفت في Xaml اربع Categories وثم اضفت في الـ Codebehind اربعا اخرى وبالتالي اصبحت هناك 8 من Categories

اذن لابد من كود الحذف وهو هذا

PHP كود :
   Private Sub button_Click(sender As ObjectAs RoutedEventArgsHandles button.Click
        Dim chart 
As DonutChart TryCast(CType(chartGeneralBorderGrid).Children.Cast(Of FrameworkElement)().Where(Function(aa.GetType() = GetType(DonutChart)).Single(), DonutChart)

 
       'حذف الكاتيغوريس
        PieChart.categories.Clear()
        PieChart.categories.Add(New Chart.DonutCategory() With {.NameA = "Visits", .ColorA = New SolidColorBrush(CType(ColorConverter.ConvertFromString("#FF60C6CF"), Color)), .PercentA = 40})
        PieChart.categories.Add(New Chart.DonutCategory() With {.NameA = "Members", .ColorA = New SolidColorBrush(CType(ColorConverter.ConvertFromString("#FF989CFF"), Color)), .PercentA = 25})
        PieChart.categories.Add(New Chart.DonutCategory() With {.NameA = "Sales", .ColorA = New SolidColorBrush(CType(ColorConverter.ConvertFromString("#FF59C5A0"), Color)), .PercentA = 23})
        PieChart.categories.Add(New Chart.DonutCategory() With {.NameA = "Lose", .ColorA = New SolidColorBrush(CType(ColorConverter.ConvertFromString("#FFF35958"), Color)), .PercentA = 12})
    End Sub 

تحياتي Smile
بالفعل أخي الحبيب أنا نسيت الحذف وقد وضعت الكود وصححته
ولكن ردي تم دمجه مع الرد السابق في هذه المشاركة
الآن الأمور تمام التمام وكل شيء غي هذا الدرس تم تطبيقه بنجاح
أسأل الله تعالى أن يسهل عليك إكمال السلسلة
وشكرنا العميق لك
Smile
ارجو ان تكون فكرة كود الحذف الموجود في Draw مفهومة ، فذلك الكود يحذف الـ Arc Shape من الاداة

لانك لما تغير على قيمة الـ Color لاحد الـ Categories راح يتم استدعاء Draw مباشرة وستقوم برسم 4 arc Shape اضافية

وبالتالي احنا بحاجة الى حذف المنحنيات السابقة Smile


اما ماحصل لديك فهو انك اضفت Categories زيادة من خلال الـ Codebehind فلا علاقة لكود الحذف الموجود في Draw Smile
الصفحات : 1 2