0

When someone puts arabic numbers in my entry , it ends the app . I'm trying to restrict entry to show only English number or convert arabic number to english I'm trying it on real device and not working at all unfortunately .

 Dictionary<string, string> numberNames;


    // SUM1 لتخزين النتيجة الاولة 
    int SUM1 = 0;
    // SUM2 لتخزين النتيجة الثانية  
    int SUM2 = 0;
    // DisplayPromptAsync تخزين حالة الاشعار 
    string action;
    // لتبديل بين entrys 
    int tap = 1;
    // عدد الاعبين 
    int playercount = 1;

    int count = 0;
    bool scroll = false;

    public Blootrecord(bool newplay)
    {
        InitializeComponent();


      


        if (newplay)
        {
            DisplayPrompt(lblname1, "اسم فريقهم");
            DisplayPrompt(lblname2, "اسم فريقنا?");

        }
        else
        {
            // اذا مالنت الثيمة ب False هذا يعني انه يريد الرجوع لاخر لعية 
            // هذه اسطر لجلب اخر قيم تم تخزينها 
            lblname1.Text = Preferences.Get("lblname1", "");
            lblname2.Text = Preferences.Get("lblname2", "");
            num1.Text = Preferences.Get("num1", "");
            num2.Text = Preferences.Get("num2", "");
            SUM1 = Convert.ToInt32(Preferences.Get("SUM1", "0"));
            SUM2 = Convert.ToInt32(Preferences.Get("SUM2", "0"));
            count = Convert.ToInt32(Preferences.Get("count", "0"));


        }

        numberNames = new Dictionary<string, string>();
        numberNames.Add("0", "۰"); //adding a key/value using the Add() method
        numberNames.Add("1", "۱");
        numberNames.Add("2", "۲");
        numberNames.Add("3", "۳");
        numberNames.Add("4", "٤");
        numberNames.Add("5", "٥");
        numberNames.Add("6", "٦");
        numberNames.Add("7", "٧");
        numberNames.Add("8", "۸");
        numberNames.Add("9", "۹");


        scrollView.HeightRequest = num1.HeightRequest;

    }


    /// <summary>
    /// هذه دالة لعررض الاشعار
    /// </summary>
    /// <param name="label"></param>
    ///         /// <param name="label2"></param>

    /// <param name="str"></param>
    async void DisplayPrompt(Label label, string str)
    {
        var s = await DisplayPromptAsync("Alert", str);
        if (string.IsNullOrEmpty(s))
            label.Text = "فريق" + playercount++;
        else
            label.Text = s;
    }

    /// <summary>
    /// زر سجل 
    /// </summary>
    /// <param name="sender"></param>
    /// <param name="e"></param>
    ///

    private async void btnRegister_Clicked(object sender, EventArgs e)
    {


        try
        {

            Entnum1 = ARCH(Entnum1);
            Entnum2 = ARCH(Entnum2);

            scrollView.HeightRequest = num1.HeightRequest;

            scroll = false;

            // اضافة سط في Editors مع القيمه المدخله 
            num1.Text += "\n" + Entnum1.Text;
            num2.Text += "\n" + Entnum2.Text;
            //اذا كان الentry فارغ يبدل القيمه ب صفر 
            if (string.IsNullOrEmpty(Entnum1.Text))
            {
                num1.Text += "0";
            }
            if (string.IsNullOrEmpty(Entnum2.Text))
            {
                num2.Text += "0";
            }
            //تحويل القيمه الي عدد صحيح وجمعها ع اخر قميه 
            SUM1 += int.Parse(num1.Text.Substring(num1.Text.LastIndexOf("\n") + 1));
            SUM2 += int.Parse(num2.Text.Substring(num2.Text.LastIndexOf("\n") + 1));
            // اذا كانت القيمه اقل من 152 يتم اضافة سطر ثم خط ثم قيمه الجمع في كل Editor 
            if (SUM1 < 152 && SUM2 < 152)
            {
                num1.Text += "\n" + "------";
                num2.Text += "\n" + "------";
                num1.Text += "\n" + SUM1;
                num2.Text += "\n" + SUM2;
            }
            else
            {
                // يتم عرض  اكير قيمه مع اكبر فائز
                if (SUM1 > SUM2)
                {
                    action = await DisplayActionSheet(" هاردلك الفوز لهم " + SUM1 + " ", "اغلاق", "لعبة جديدة");

                }
                else if (SUM1 < SUM2)
                {

                    action = await DisplayActionSheet(" مبروك الفوز لنا" + SUM2 + "", "اغلاق", "لعبة جديدة");
                }
                else


                {

                    action = await DisplayActionSheet("تعادل", "اغلاق", "لعبة جديدة");
                }
                // اذا قمت بأختيار لعبة جديدة
                if (action == "لعبة جديدة")
                {
                    // يحذف جميع القيم ولاكن يبقي اسم العبين 
                    num1.Text = num2.Text = "0";
                    Entnum1.Text = Entnum2.Text = null;
                    SUM1 = SUM2 = 0;
                    await scrollView.ScrollToAsync(num1, ScrollToPosition.Start, true);
                    count = 0;
                    scroll = true;
                }
            }


            Entnum1.Text = Entnum2.Text = null;
            // store data 
            // تخزين البيانات في كل مره 
            Preferences.Set("lblname1", lblname1.Text);
            Preferences.Set("lblname2", lblname2.Text);
            Preferences.Set("num1", num1.Text);
            Preferences.Set("num2", num2.Text);
            Preferences.Set("SUM1", SUM1.ToString());
            Preferences.Set("SUM2", SUM2.ToString());



            count++;
            if (count >= 5 && count <= 7 && !scroll)
            {
                await scrollView.ScrollToAsync(num1, ScrollToPosition.Center, true);
            }
            else if (count > 7 && !scroll)
            {
                await scrollView.ScrollToAsync(num1, ScrollToPosition.End, true);

            }
        }
        catch (Exception ex)
        {
            // في حالة وجود خطأ غير متوقع 
            await DisplayAlert("Opps!", ex.Message, "Ok");
            await Navigation.PopAsync();
        }
    }



    void btnBack_Clicked(System.Object sender, System.EventArgs e)
    {

        try
        {


            if (num1.Text != "0" && num2.Text != "0")
            {
                // يتم اذالة ثلاث اسطر وطرح قيمة السطر الثالث من المجموع الكلي ثم ازالة السطر الثالث 
                // editor number one 
                num1.Text = num1.Text.Remove(num1.Text.LastIndexOf("\n"));
                num1.Text = num1.Text.Remove(num1.Text.LastIndexOf("\n"));
                SUM1 -= int.Parse(num1.Text.Substring(num1.Text.LastIndexOf("\n") + 1));
                num1.Text = num1.Text.Remove(num1.Text.LastIndexOf("\n"));
                // editor number two
                num2.Text = num2.Text.Remove(num2.Text.LastIndexOf("\n"));
                num2.Text = num2.Text.Remove(num2.Text.LastIndexOf("\n"));
                SUM2 -= int.Parse(num2.Text.Substring(num2.Text.LastIndexOf("\n") + 1));
                num2.Text = num2.Text.Remove(num2.Text.LastIndexOf("\n"));
            }
        }
        catch (Exception ex)
        {

            DisplayAlert("Opps!", ex.Message, "Ok");
        }
    }


    private void Entnum1_Focused(object sender, FocusEventArgs e)
    {
        tap = 1;
    }

    private void Entnum2_Focused(object sender, FocusEventArgs e)
    {
        tap = 2;
    }

    private void Entnum2_PropertyChanged(object sender, System.ComponentModel.PropertyChangedEventArgs e)
    {
        // في حالة اختيار Closr  

        if (action == "اغلاق")
        {
            // حزف جميع القيم المخزنه 
            Preferences.Clear();
            // الرجوع الي الصفحة الاولة  
            Navigation.PopAsync();
        }
    }

    Entry ARCH(Entry entry)
    {
        for (var i = 0; i < 10; i++)
        {
            entry.Text = entry.Text.Replace(numberNames[i.ToString()], i.ToString());
        }

        return entry;
    }


}
}

image

Cfun
  • 8,442
  • 4
  • 30
  • 62

1 Answers1

1

You could try this method to convert it:

 private string convertArabic(string arabicNum)
    {
        var chArr = arabicNum.ToCharArray();
        var sb = new Java.Lang.StringBuilder();
        foreach (var ch in chArr)
        {
            if (Character.IsDigit(ch))
            {
                sb.Append(Character.GetNumericValue(ch));
            }
            else if (ch == '٫')
            {
                sb.Append(".");
            }

            else
            {
                sb.Append(ch);
            }
        }
        return sb.ToString();
    }
Leo Zhu
  • 15,726
  • 1
  • 7
  • 23