كيف تستخدم حلقة foreach واحدة للحصول على قيم من مجموعتين مختلفتين؟!

 

السلام عليكم

وأهلا بكم،،

 

هل ترغب في أن تحصل على أكثر من قيمة من أكثر من مجموعة باستخدام تعليمة foreach واحدة؟  لنقل أنه لديك مجموعات (مصفوفتان) وترغب باستخدام حلقة foreach واحدة لمعالجة كلا المصفوفتين؟

 

الحل بسيط جدا ففي دوت نت الإصدار الرابع قد تم إضافة تابع ملحق جديد يدعى Zip. باختصار وظيفة التابع هو الدمج بين مجموعتين وذلك من خلال توفير العنصر ومقابله من كلا المجموعتين حسب الدليل index الحالي.

 

clip_image001 طبعا اذا كان كلا المجموعتين ذات بعد متساو فلا بأس أما إن لم يكونا كذلك فإن التابع سوف يتوقف عند الوصول لآخر عنصر من أحد المجموعتين.

 

 لاحظ المثال التالي:

 

مثال سي شارب

 

var numbersInWords = new[] { “One”, “Two”, “Three” };

var numbers = new int[] { 1, 2, 3 };

 

foreach(var item in numbers.Zip(numbersInWords, (n, nw) =>

new { Number = n , Word = nw}))

{

Console.WriteLine($”{item.Number}: {item.Word}”);

}

 

 

نفذ البرنامج السابق لتحصل على:

 

ناتج خرج تنفيذ الشيفرة السابقة

PS C:\Sample> dotnet run

1: One

2: Two

3: Three

Advertisements

كيف تستخدم حلقة foreach واحدة للحصول على قيم من مجموعتين مختلفتين؟!

 

السلام عليكم

وأهلا بكم،،

 

هل ترغب في أن تحصل على أكثر من قيمة من أكثر من مجموعة باستخدام تعليمة foreach واحدة؟  لنقل أنه لديك مجموعات (مصفوفتان) وترغب باستخدام حلقة foreach واحدة لمعالجة كلا المصفوفتين؟

 

الحل بسيط جدا ففي دوت نت الإصدار الرابع قد تم إضافة تابع ملحق جديد يدعى Zip. باختصار وظيفة التابع هو الدمج بين مجموعتين وذلك من خلال توفير العنصر ومقابله من كلا المجموعتين حسب الدليل index الحالي.

 

clip_image001 طبعا اذا كان كلا المجموعتين ذات بعد متساو فلا بأس أما إن لم يكونا كذلك فإن التابع سوف يتوقف عند الوصول لآخر عنصر من أحد المجموعتين.

 

 لاحظ المثال التالي:

 

مثال سي شارب

 

var numbersInWords = new[] { “One”, “Two”, “Three” };

var numbers = new int[] { 1, 2, 3 };

 

foreach(var item in numbers.Zip(numbersInWords, (n, nw) =>

new { Number = n , Word = nw}))

{

Console.WriteLine($”{item.Number}: {item.Word}”);

}

 

 

نفذ البرنامج السابق لتحصل على:

 

ناتج خرج تنفيذ الشيفرة السابقة

PS C:\Sample> dotnet run

1: One

2: Two

3: Three

ابنِ تطبيقك في بيئة ويندوز WPF باستخدام حزمة Prism.Unity

أصبح تصميم برامج منصة ويندوز لا يقل تقنيا عن مفاهيم المستخدمة في تطبيقات شبكة الإتصالات. في هذه المقالة سوف نتعرف إلى كيفية استخدام مكتبة من مايكروسوفت تدعى Prism. سوف تساعدك هذه المكتبة وغيرها من المكتبات المرتبطة بها على بناء تطبيقات ديناميكية ومرنة من حيث أنها تسمح لك بتحديد معالم المناطق Regions في النافذة الرئيسية لتطبيقك فبذلك تكون قادرا على تغير  شرائح العرض Views أثناء عمل التطبيق. ولكن أولا دعنا نتعرف إلى بعض المفاهيم الأساسية والبسيطة!

 

بعد قراءة هذه المقالة ستكون قادرا استخدام مكتبة Prism.Unity من خلال

  1. تجهيز واجهة تطبيقك الرئيسية Shell
  2. رسم وتحديد الأماكن ضمن النافذة الرئيسة Shell مثلا
  3. بناء شرائح عرض Views

 

clip_image001 مفهوم Shell

بإختصار مفهوم Shell هي الواجهة الرئيسية  Master Windowأو Master Page بالنسبة لمطوري تطبيقات شكبة الإتصالات (ويب)

 

clip_image001[1] مفهوم المنطقة (المكان) Region

تتيح لك مكتبة Prism تعريف مناطق داخل الواجهة الرئيسية Shell لتمكنك من إضافة شرائح العرض Views أثناء عمل البرنامج

 

clip_image001[2] مفهوم “شرائح العرض” Views

شرائح العرض هي مفهوم العنصر مادون النافذة Window. هذه قد تمثل UserControl أو custom control. شريحة أو شرائح العرض ستظهر ضمن المناطق أو الأماكن Regions التي تم تحديدها داخل الواجهة الرئيسية Shell . بإختصار فإن عملك ستركز على شرائح العرض Views بعد أن تكون قد أتممت بناء واجهتك الرئيسية Shell و رسمت المناطق داخلها.

 

لاحظ الشكل التالي فإن Shell تمثل قالب الواجهة التي تراها ومن ثم فإن المناطق المعرفة عديدة منها Main Region و MainToolBarRegion و  ResearchRegion وأخير فإن شرائح العرض Views هي عبارة عن العناصر التي تراها داخل كل منطقة

 

 

والآن لنبدأ بالخطوات العلمية في إنشاء برنامج عروض ويندوز

 

clip_image003 إنشاء مشروع جديد

قم بإنشاء تطبيق بيئة ويندوز WPF

 

clip_image003[1] تعديل ملف App.xaml

إذهب إلى ملف App.xaml وأزل StartupUri – انظر السطر المظلل باللون الزهري في الشيفرة التالية:

 

App.xaml

<Application x:Class=”PrismRegionSample2.App”
           
xmlns=”http://schemas.microsoft.com/winfx/2006/xaml/presentation&#8221;
           
xmlns:x=”http://schemas.microsoft.com/winfx/2006/xaml&#8221;
           
xmlns:local=”clr-namespace:PrismRegionSample2″
            StartupUri=”MainWindow.xaml”>
   
<Application.Resources>
        
   
</Application.Resources>
</Application>

 

clip_image003[2] تنصيب حزمة Prism.Unity

بعدها قم بفتح Package Manager Console وادخل الأمر التالي لتنصيب حزمة Prism.Unity

Package Manager Console

PM> Install-Package Prism.Unity

 

بعض تنصيب الحزمة ستلاحظ أن هناك حزم أخرى مرتبطة قد تم تنصيبها ، يمكنك عرض الحزم المنصبة من خلال الأمر Get-Package

clip_image004

 

أو من خلال نافذة نيوجت

clip_image005

 

clip_image003[3] تجهيز ملف Shell.xaml

هذا الملف يمثل العنظر الرئيس (الواجهة الرئيسة) في برنامجك. في هذه الواجهة ستقوم بتعريف (تقسيم) واجهة برنامجك إلى مناطق مثلا منطقة البحث ، منطقة الفهرس و المنطقة الرئيسية. لقد أحطت كل منطقة بحدود حتى يتثنى لنا معرفة المناطق عند تشغيل البرنامج

 

 

Shell.xaml

1

2

3

4

5

6

7

8

9

10

11

12

13

 

14

15

16

17

18

 

19

20

21

 

22

23

24

25

<Window x:Class=”PrismRegionSample2.Shell”

    xmlns=”http://schemas.microsoft.com/winfx/2006/xaml/presentation&#8221;

    xmlns:x=”http://schemas.microsoft.com/winfx/2006/xaml&#8221;

    xmlns:d=”http://schemas.microsoft.com/expression/blend/2008&#8243;

    xmlns:mc=”http://schemas.openxmlformats.org/markup-compatibility/2006&#8243;

    mc:Ignorable=”d”

    xmlns:prism=”http://prismlibrary.com/&#8221;

    Title=”Shell” Height=”300″ Width=”300″>

  <Grid>

     <Grid.RowDefinitions>

        <RowDefinition Height=”Auto”/>

        <RowDefinition Height=”*”/>

     </Grid.RowDefinitions>
 

     <DockPanel VerticalAlignment=”Top”  >

        <Border BorderThickness=”2″ BorderBrush=”Green”>

           <ContentControl prism:RegionManager.RegionName=”HeaderRegion” />

        </Border>

     </DockPanel>
 

     <DockPanel Grid.Row=”1″>

        <Border BorderThickness=”3″ BorderBrush=”LightGreen”>

           <ContentControl Name=”MainContentControl” prism:RegionManager.RegionName=”MainRegion” Grid.Row=”1″/>

        </Border>

     </DockPanel>

   </Grid>

</Window>

clip_image003[4] تجهيز ملف Bootstrapper

 

 

Bootstrapper

1

2

3

4

5

6

 

7

8

9

10

11

12

 

13

14

15

 

16

17

18

19

 

20

21

22

23

 

24

25

26

27

28

public class Bootstrapper : UnityBootstrapper

{

    protected override DependencyObject CreateShell()

    {

        return this.Container.TryResolve<Shell>();

    }

 

    protected override void InitializeShell()

    {

        base.InitializeShell();

        App.Current.MainWindow = (Window)this.Shell;

        App.Current.MainWindow.Show();

    }

 

    protected override void ConfigureModuleCatalog()

    {

        base.ConfigureModuleCatalog();

 

        var moduleCatalog = (ModuleCatalog)this.ModuleCatalog;

        moduleCatalog.AddModule(typeof(MainRegion));

        moduleCatalog.AddModule(typeof(HeaderRegion));

    }

 

    protected override void InitializeModules()

    {

        base.InitializeModules();

    }

 

    protected override void ConfigureContainer()

    {

        base.ConfigureContainer();

    }

}

 

clip_image003[5] تجهيز فئات الوارثة من IModule

 

 

MainRegion.cs

1

2

3

 

4

5

6

 

7

 

8

9

10

11

12

public class MainRegion : IModule

{

    private readonly IRegionManager regionManager;

 

    public MainRegion(IRegionManager regionManager)

    {

        this.regionManager = regionManager ?? throw new ArgumentNullException(nameof(regionManager));

    }

 

    public void Initialize()

    {

        regionManager.Regions[“MainRegion”].Add(new MainView());

    }

}

 

 

 

HeaderRegion.cs

1

2

3

 

4

5

6

7

 

8

9

10

11

12

public class HeaderRegion : IModule

{

    private readonly IRegionManager regionManager;

 

    public HeaderRegion(IRegionManager regionManager)

    {

        this.regionManager = regionManager;

    }

 

    public void Initialize()

    {

        regionManager.Regions[“HeaderRegion”].Add(new HeaderView());

    }

}

 

clip_image003[6] تجهيز شرائح العرض Views

 

 

MainView.cs

1

2

3

4

5

6

7

8

9

10

11

<UserControl x:Class=”PrismRegionSample2.View.MainView”

             xmlns=”http://schemas.microsoft.com/winfx/2006/xaml/presentation&#8221;

             xmlns:x=”http://schemas.microsoft.com/winfx/2006/xaml&#8221;

             xmlns:mc=”http://schemas.openxmlformats.org/markup-compatibility/2006&#8243;

             xmlns:d=”http://schemas.microsoft.com/expression/blend/2008&#8243;

             mc:Ignorable=”d”

             d:DesignHeight=”300″ d:DesignWidth=”300″>

    <StackPanel>

        <Label FontSize=”40″>Main Region</Label>

    </StackPanel>

</UserControl>

 

 

HeaderView.cs

1

2

3

4

5

6

7

8

9

10

11

12

<UserControl x:Class=”PrismRegionSample2.View.HeaderView”

             xmlns=”http://schemas.microsoft.com/winfx/2006/xaml/presentation&#8221;

             xmlns:x=”http://schemas.microsoft.com/winfx/2006/xaml&#8221;

             xmlns:mc=”http://schemas.openxmlformats.org/markup-compatibility/2006&#8243;

             xmlns:d=”http://schemas.microsoft.com/expression/blend/2008&#8243;

             xmlns:local=”clr-namespace:PrismRegionSample2.View”

             mc:Ignorable=”d”

             d:DesignHeight=”300″ d:DesignWidth=”300″>

    <StackPanel>

        <Label FontSize=”60″>Header Region</Label>

    </StackPanel>

</UserControl>

 

 

clip_image003[7] أخيرا شغل البرنامج

 

 

clip_image006

 

 

clip_image007 الملحق أ

في حال ظهور الخطأ التالي فهذا يعني أن بعض المكتبات ناقصة بسبب أنك لم تقم بتنصيب الحزمة الصحيحة المذكورة في المقالة Prism.Unity

 

clip_image008

حمل الشيفرة المصدرية:

clip_image009

 

المصادر:

[1]. https://msdn.microsoft.com/en-us/library/ff921098(v=pandp.40).aspx

 

كيف تنشء قاعدة بيانات جديدة في ماي سكول

    إذا كانت هذه المرة الأولى التي تنشء فيها قاعدة بيانات ماي سكول فهذه المقالة تناسبك تماما.

     

    بعد أن تكون قد أتممت عملية تنصيب MySQL Workbench بنجاح

     

    1. قم بتشغيل التطبيق MySQL Workbench

    clip_image001[4]

     

     

     

    1. في قسم  Physical Schemas انقر على إضافة سمة جديدة كما هو موضح بالصورة التالية

    clip_image002[4]

     

    1. ادخل اسم لقاعدة البيانات الجديدة ومن ثم انقر على زر الحفظ كما هو موضح بالصورة التالية

    clip_image003

     

    1. قم عد إلى تبويبة Physical Schemas وتأكد من أنك قد اخترت قاعدة البيانات الجديدة (لاحظ الشكل التالي)

    clip_image004

     

    1. أخير ستظهر لك نافذة انشاء جدول جديد (لاحظ الشكل التالي) والآن يمكنك البدء وانشاء جدوالك

    clip_image005

     

    المصادر:

    [1]. https://dev.mysql.com/doc/workbench/en/wb-getting-started-tutorial-creating-a-model.html

     

كيف تربط أكثر من حساب ون درايف على حاسبتك

    اذا كنت قد استخدمت ون درايف سابقا فربما قد صادفتك مشكلة عندما أردت إضافة حساب شخصي آخر. حيث أن مايكروسوفت لا تسمح بربط أكثر من حساب شخصي واحد على نظام التشغيل. ولكن هناك طريقة أخرى نظامية تؤمن لك إضافة حساب ثاني وثالث إلى حاسبتك فقط اتبع الخطوات التالية:

     

    1. أدخل إلى حسابك الثانوي الجديد من خلال المتصفح
    2. ثم قم بإنشاء مجلد داخل الحساب يمكن أن تسميه مثلا “ملفات مشتركة”
    3. انقل محتويات ون درايف كاملا إلى هذا المجلد
    4. اختر المجلد الجديد واختر من القائمة “مشاركة”
    5. في نافذة المشاركة ، اختر مشاركة عبر البريد الإلكتروني (لاحظ الصورة التالية)

     

    clip_image001

     

    1. أدخل عنوان البريد الإلكتروني الأساسي الذي تود من خلاله الوصول إلى محتويات ون درايف الثانوي
    2. ستصل لك رسالة إلى بريدك الإلكتروني الأساسي تعلمك أنه قد مشاركتك مجلد من حساب آخر (حسابك الثانوي)
    3. انقر على الزر داخل الرسالة ليقوم المتصفح بفتح المجلد المشارك معك
    4. ستلاحظ في الصفحة هناك زر “إضافة إلى ون درايف الخاص بك” ، انقر عليه (لاحظ الصورة التالية)

    clip_image002

    1. وبعدها ستلاحظ أن المجلد الجديد قد ظهر ضمن حسابك الرئيسي في ون درايف على حاسبتك

     

    المصادر:

    [1]. http://windowsreport.com/two-onedrive-accounts/

ماذا تفعل لو فقدت محتوى أحد ملفاتك بعد انهيار مفاجئ لفيجوال ستديو

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

 

هل صادفك أن فقدت فحوى أحد ملفاتك بعد انهيار فيجوال ستديو اثناء عملك لتظهر لك الرسالة Visual Studio has stopped working ومن ثم Visual Studio Recovered Files ومن ثم تفاجئت أنك فقدت فحوى أحد الملفات؟؟

 

 

clip_image001

 

clip_image002

 

 

C:\Users\<UserName>\Documents\Visual Studio 2015\Backup Files\<Project Name>\

 

C:\Users\<UserName>\Documents\Visual Studio 2010\Backup Files\<Project Name>\ 

 

 

clip_image003

 

المراجع:

[1]. https://stackoverflow.com/a/6250480/2696230

كيف تغير نوع كائن من object إلى كائن مجهول (بدون التعريف) Anonymous Type

هل احتجت في يوم أو في مهمة إلى تغير نوع كائن object إلى كائن غير معرف (anonymous type)؟ الأمر في غاية البساطة:

 

private T ConvertTo<T>(T typeHolder, object obj) => (T)obj;

 

ولكن قد تتساءل ما الحاجة لهذه المعلية وخاصة أن شرط التحويل أن يكون الكائن object هو فعلا يمثل كائن غير معرف حتى يتم التحويل بشكل ناجح وصحيح.

تساؤلك في محله والجواب انه قد تحتاج إلى إنشاء نسخة ثانية أو ثالثة من كائن غير معرف (anonoymous type) باستخدام  

FormatterServices أو Activator.

 

ملاحظة: هناك فرق في قدارت كلا الفئتين Activatior و FormatterServices. في حين أن Activator تتطلب منك مسبقا معرفة شكل الباني من حيث القيم الممررة (برامترات) إذ أن الأنواع غير مسبقة التعريف لا تحتوي على باني افتراضي أو باني بدون قيم ممررة (Parameterless Constructor) وهذا سوف يسبب متاعب خاصة مع الأنواع المعقدة (Complex Type)

 

var car = new { Maker = “BMW”, Type = “Sedan”, Year = 2017 };
var anotherCar = Activator.CreateInstance(car.GetType(), new object[] { “Mercedes-Benz”, “Four-Wheels”
, 1995 });
anotherCar.Dump();

 

5ø4

 

Maker

Mercedes-Benz

Type

Four-Wheels

Year

1995

 

ولكن ماذا عن المثال التالي:

var complexCar = new { Maker = “BMW”, Owners = new { First = “Ahmad”, Second = “Yaser” } };
var anotherComplexCar = Activator.CreateInstance(complexCar.GetType(), new object[] { “Mercedes”, new object[] { “Lama”, “Malek”
} });
anotherComplexCar.Dump();

 

6MissingMethodException4

Constructor on type ‘<>f__AnonymousType1`2[[System.String, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089],[<>f__Anonymou…

المشكلة أن القيم الممررة لم تكن توافق شكل الباني

 

الحل الثاني هو استخدام FormatterService التي توفر عدد من التوابع لإنشاء نسخة من كائن object الميزة التي تقدمها أنها ستقوم بإنشاء نسخة من كائن دون استدعاء الباني

 

var complexCar = new { Maker = “BMW”, Owners = new { First = “Ahmad”, Second = “Yaser” } };
//var anotherComplexCar = Activator.CreateInstance(complexCar.GetType(), new object[] {“Mercedes”, new object[] { “Lama”, “Malek”}} );

var anotherComplexCar = System.Runtime.Serialization.FormatterServices.GetUninitializedObject(complexCar.GetType());
anotherComplexCar.Dump();

 

5ø4

 

Maker

null

Owners

null

 

لكن التابع GetUninitializedObject سوف يعيد نسخة لكن من نوع object وبالتالي نحتاج إلى عمل تغير نوع من object إلى نوع الكائن المجهول. علينا استخدام التابع المعرف في أول المقالة على النحو التالي:

private T CastTo<T>(T typeHolder, object obj) => (T)obj;

 

var complexCar = new { Maker = “BMW”, Owners = new { First = “Ahmad”, Second = “Yaser” } };
//var anotherComplexCar = Activator.CreateInstance(complexCar.GetType(), new object[] {“Mercedes”, new object[] { “Lama”, “Malek”}} );

var anotherComplexCar = System.Runtime.Serialization.FormatterServices.GetUninitializedObject(complexCar.GetType());
var castedAnotherComplexCar = CastTo(complexCar, anotherComplexCar);
anotherComplexCar.Dump();

 

المصادر:

[1]. https://stackoverflow.com/a/1409776/2696230

[2]. https://connect.microsoft.com/VisualStudio/feedback/details/521722/system-activator-createinstance-throws-system-missingmethodexception-with-constructor-containing-an-optional-parameter

[3]. https://stackoverflow.com/a/2501231/2696230

هل تود تحويل نص كامل إلى سطر واحد؟؟

الأمر بسيط Notepad++ يوفر هذه الإمكانية

من قائمة Edit ←Line Operations ← Join Lines (لاحظ الصورة 1)

clip_image002

الصورة 1 توضح كيفية دمج أسطر نص مع بعضها البعض لتصبح سطر واحد فقط

بعض الحالات المفيدة ، مثل اسناد قيمة إلى متحول (variable) ، فمثلا اذا كان لديك ملف من هيئة xml وأردت أخذ محتواه واسناده إلى متحول سيكون من اللازم تحويل نص الـ xml إلى سطر واحد قبل اسناده.

طرق إجراء عملية التبديل بين حقلين (Swap Two Variables)

 

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

أهلا ومرحبا بكم،،

في هذه المقالة القصيرة سنتعرف إلى طرق مختلفة للتبديل بين حقلين two variables. بشكل عام عملية التبديل تعرف باسم تبديل قيم حقلين swap. من بدأ بتعلم البرمجة سيمر clip_image002على حالة قد يحتاج فيها إلى تبديل قيم حقلين ليصبح الحقل الأول يحمل قيمة الحقل الثاني، في حين تصبح قيمة الحقل الثاني هي قيمة الحقل الأول سابقا قبل التبديل. الطريقة التقليدية التي نعرفها وهي باستخدام حقل إضافي ثالث ليقوم بدور الوسيط ليقوم بحفظ قيم أحد الحقلين من الضياع أثناء إجراء عملية التبديل. لكن هل تعلم أنه بإمكانك إجراء عملية التبديل هذه بطرق أخرى دون الحاجة إلى حقل ثالث وسيط.

قد تتعجب وتتسائل ما الحاجة إلى طرق أخرى إن كانت الطريقة التقليدية تفي بالغرض؟!ّ الجواب هو إذا كنت تبرمج الأجهزة الصغيرة التي لا تتعدى ذاكرتها عدة بايتات فقط , عندها ستضطر إلى البحث عن طرق أخرى للتقليل من استهلاك الذاكرة أو حتى في حال عدم وجود مساحة كافية في الذاكرة لاستخدام أي حقل إضافي.

دعنا نقم أولا بعرض طريقة الكود التقليدي. كود1 يعرض عملية التبديل باستخدام العملية الحسابية. طبعا كلمة ref تستخدم في لغة السي شارب C# وهي تكافئ تماما & في لغة السي بلس بلس (C++)

كود 1. التبديل بين الحقول Variables باستخدام حقل إضافي

void Swap(ref int a, ref int b)
{
      int c;

      c = a;
      a = b;
      b = c;
}

لاحظ في كود2 التالي تم استخدام عمليات الجمع والطرح للتبديل بين الحقول دون الحاجة إلى حقل إضافي. الكود الجديد فيه ميزة وعلة. الميزة توفير مساحة في الذاكرة فلا حاجة لحقل ثالث. أما العلة فهي قد يحصل Overflow طفحان بسبب ناتج جمع قيميتين قد ينتج عنه عدد كبير لا يمكن استيعابة في الحقل الحالي. كود3 يحل هذه المشكلة باستخدام exclusive-OR

كود 2. التبديل بين الحقول Variables باستخدام العمليات الحسابية (الجمع والطرح)

void Swap(ref int a, ref int b)
{
     a = a + b;
     b = a – b;
     a = a – b;
}

في الكود التالي تم استخدام exclusive-OR ، وهو عميلة تتم على مستوى البتات (قيم ثنائية 1 أو 0) يمكن مراجعة موقع مايكروسوفت (انقر هنا) لتحصل على المزيد من الشرح أفضل من السابق بسبب أن إحتمال حدوث فائض غير وارد.

كود 3. التبديل بين الحقول Variables باستخدام exlusive-OR

static void Swap(ref int a, ref int b)
{
     a = a ^ b;
     b = a ^ b;
     a = a ^ b;
}

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

  •     1. الطريقة التقليدية باستخدام حقل ثالث إضافي
  •     2. طريقة حسابية (الجمع والطرح) لكن قد يحصل خلل بسبب عدم استيعاب الحقل لجمع عددين في حال فقط أن جمعها ينتج عنهما قيمة كبيرة
  •     3. استخدام المعامل exlusive-OR، والتي تقوم بالعمل على مستوى البتات (بالشكل العدد الثنائي)

كيف يتم دعم لغات متعددة للتطبيق في بيئة تطبيق ويندوز الكلاسيكي Windows Client Application في الدوت نت .NET

1222c8fb-51b8-49e0-90f5-70bcd05f311aفي يومنا هذا العديد من التطبيقات تسعى لمخاطبة قسما كبيرا من المستخدمين على مستوى العالم ، لا ريب أن ذلك يحتاج إلى استخدام مختلف لغات القوم و ألسنتهم. على كل حال ، في بيئة مايكروسوفت دوت نت ذلك في منتهى السهولة و لا يتعدى تحقيق ذلك سوى بضع خطوات

بعد أن نقوم بإعداد شاشات و واجهات تطبيق ما ، نقوم باتباع الخطوات التالية:

  1. بعد التأكد من أن التركيز (Focus) على الشاشة أو الواجهة ككل
  2. نذهب إلى نافذة الخصائص
  3. في نافذة الخصائص تغير قيمة الخاصيتين:
  •         أ . Localizable من False إلى True
  •         ب. Language من (Default) إلى Arabic

4. بعدها نضع التسميات الصحيحة لكل الأدوات التابعة للنافذة أو الواجهة

أ. تم تغير خصائص النافذة Form1 كما يلي (لاحظ الشكل):

  •            . Text: النافذة الرئيسية
  •            . RightToLeft: نختار Yes
  •            . RightToLeftLayout: نختار True

ب. تم تغير خصائص الأداة الزر button1 كما يلي:

  •             . Text: إنقر هنا

 

win1

وذلك تكون واجهة اللغة العربية قد أصبحت جاهزة.

الآن لنقم بدعم لغة أخرى للتطبيق و لتكن اللغة الانجليزية و ذلك باتباع الخطوات التالية:

  1. من نافذة الخصائص للنافذة Form1 ، نختار الخاصية Language و نغير قيمتها من Arabic إلى English
  2. نغير قيم الخصائص للنافذة Form1 كما يلي (لاحظ الشكل بعد تطبيق الخطوات):
  •       أ. Text: نكتب Main Window
  •      ب. RightToLeft: نختار No
  •      ت. RightToLeftLayout: نختار False

3. نغير قيم خصائص button1 كما يلي:

  •       أ. Text: نكتب Click Here

win2

يمكنك إعادة الخطوات السابقة لإضافة أي لغة أخرى.