PDA

View Full Version : سوال: جدا کننده سه رقم سه رقم بعد از سه رقم اول ،کرسر میره سمت چپ عدد!



ashkan1234
پنج شنبه 26 اردیبهشت 1392, 12:24 عصر
با سلام دوستان واسه جدا کننده سه رقم سه رقم در رویداد change یک تکست باکس از این روش استفاده میکنم!
txt1.Text = String.Format("{0:#,###0}", double.Parse(txt1.Text));
حالا یک مشکلی که هست اینه که تا سه رقم اول عدد،کرسر سمت راست عدد قرار داره ولی به محض اینکه عدد چهارم وارد میشه و کد بالا فعال میشه کرسر میره سمت چپ عدد و سایر اعداد از سمت چپ وارد میشن!
right to left و textalign رو هم تغییر دادم ولی مشکل حل نشد!
وقتی هم که با دکمه Delete یا Backspace میخوام اعداد رو پاک کنم ویژوال استدیو ارور میده!
دوستان راهی هست این مشکل برطرف بشه؟

manij_mhm
پنج شنبه 26 اردیبهشت 1392, 13:18 عصر
این کد شما برای وقتی کار میکنه که عدد رو داشته باشید و بعد بخواید اونو 3 رقم 3رقم جدا کنید. اینجوری مشکلی نداره! شما احتمالا از این کد برای TextChanged استفاده کردید.

ashkan1234
پنج شنبه 26 اردیبهشت 1392, 13:44 عصر
اینارو که بنده عرض کردم!بفرمایید که مشکل چطور حل میشه؟
راه حلش چیه که موقع وارد کردن عدد بعد از عدد سوم کرسر چشمک زن یهو نپره سمت چپ عدد؟
راستی موقع Delete هم به نوع داده ای دابل گیر میده!حق هم داره چون من دارم تو تکست باکس نوع استرینگ وارد میکنم در صورتی که نوع تکست باکس رو کانورت کردم به دابل!
خوب دوستان آیا راه حلی هست برای رفع این مشکلات؟

mamiz
پنج شنبه 26 اردیبهشت 1392, 13:50 عصر
راه حلش چیه که موقع وارد کردن عدد بعد از عدد سوم کرسر چشمک زن یهو نپره سمت چپ عدد؟
برای اینکه کرسر همیشه در انتهای عدد وایسه:

txt1.Select(txt1.Text.Length, 0);

manij_mhm
پنج شنبه 26 اردیبهشت 1392, 14:02 عصر
http://barnamenevis.org/showthread.php?236721-%D8%AA%D8%BA%DB%8C%DB%8C%D8%B1-%D9%85%DA%A9%D8%A7%D9%86-Cursor-%D8%A8%D8%A7-%DA%A9%D8%AF-%D9%86%D9%88%DB%8C%D8%B3%DB%8C

http://barnamenevis.org/showthread.php?235806-%D9%85%DA%A9%D8%A7%D9%86-%DA%A9%D8%B1%D8%B3%D8%B1-%D8%AF%D8%B1-%D8%AA%DA%A9%D8%B3%D8%AA-%D8%A8%D8%A7%DA%A9%D8%B3-...-%D8%9F!&p=1049164#post1049164

manij_mhm
پنج شنبه 26 اردیبهشت 1392, 14:04 عصر
http://barnamenevis.org/showthread.php?235806-%D9%85%DA%A9%D8%A7%D9%86-%DA%A9%D8%B1%D8%B3%D8%B1-%D8%AF%D8%B1-%D8%AA%DA%A9%D8%B3%D8%AA-%D8%A8%D8%A7%DA%A9%D8%B3-...-%D8%9F!&p=1049164#post1049164

ashkan1234
پنج شنبه 26 اردیبهشت 1392, 14:21 عصر
برای اینکه کرسر همیشه در انتهای عدد وایسه:

txt1.Select(txt1.Text.Length, 0);

عالی بود جواب داد!دقیقا مشکلم همین بود!ممنون!
حالا واسه اینکه بعد از حذف کردن خطا نوع دابل به استرینگ نگیره چه راه حلی پیشنهاد میفرمایید؟؟

ashkan1234
پنج شنبه 26 اردیبهشت 1392, 22:33 عصر
دوستان واقعا کسی نمیدونه این خطا رو چطور میشه جلوشو گرفت؟
اگر کانورت به دابل رو بردارم دیگه سه رقم سه رقم جدا نمیشه!!!
پس راه اش چیه؟

khokhan
پنج شنبه 26 اردیبهشت 1392, 23:12 عصر
دوستان واقعا کسی نمیدونه این خطا رو چطور میشه جلوشو گرفت؟
اگر کانورت به دابل رو بردارم دیگه سه رقم سه رقم جدا نمیشه!!!
پس راه اش چیه؟

درود

این نمونه بی دردسر ترین کدی هست که در این زمینه ساخته ام

کافیه عدد رو یکی یکی وارد کنین تا از هر سه عدد با کاما جداشون کنه :لبخند:

khokhan
پنج شنبه 26 اردیبهشت 1392, 23:17 عصر
البته می شه اینکارو هم کرد


private void textBox2_TextChanged(object sender, EventArgs e)
{
string value = textBox2.Text.Replace(",", "");
ulong ul;
if (ulong.TryParse(value, out ul))
{
textBox2.TextChanged -= textBox2_TextChanged;
textBox2.Text = string.Format("{0:#,#}", ul);
textBox2.SelectionStart = textBox2.Text.Length;
textBox2.TextChanged += textBox2_TextChanged;
}
}

khokhan
پنج شنبه 26 اردیبهشت 1392, 23:32 عصر
این هم کوتاهترین راه :لبخند::لبخند::لبخند:


private void textBox3_TextChanged(object sender, EventArgs e)
{
string str = textBox3.Text;
double result = 0;
if (double.TryParse(str, out result))
{
textBox3.Text = String.Format("{0:#,#.#}", result);
textBox3.SelectionStart = str.Length + 1;
}
}

ashkan1234
جمعه 27 اردیبهشت 1392, 10:52 صبح
این هم کوتاهترین راه :لبخند::لبخند::لبخند:


private void textBox3_TextChanged(object sender, EventArgs e)
{
string str = textBox3.Text;
double result = 0;
if (double.TryParse(str, out result))
{
textBox3.Text = String.Format("{0:#,#.#}", result);
textBox3.SelectionStart = str.Length + 1;
}
}
واسه کدها ممنون!
فقط اگه میشه یه توضیح کوتاهی در مورد TryParse و پارامتر دومش بدید ممنون میشم!
دوم اینکه دستور Convert با Parse چه فرقی میکنه؟کدومش بهتره استفاده بشه؟

mamiz
شنبه 28 اردیبهشت 1392, 13:53 عصر
حالا واسه اینکه بعد از حذف کردن خطا نوع دابل به استرینگ نگیره چه راه حلی پیشنهاد میفرمایید؟؟
دوست عزیز اگر درست متوجه شده باشم خطایی که شما میگیرید به خاطر خالی شدن تکست باکس شماست.که استفاده از TryParse همراه با یک IF برای چک کردن این مورد مشکلو حل میکنه.
پیشنهاد من کد زیره:

using System.Globalization;

decimal myValue;
if (decimal.TryParse(txt1.Text, out myValue))
{
txt1.Text = myValue.ToString("N0", CultureInfo.CreateSpecificCulture("en-US"));
txt1.Select(txt1.Text.Length, 0);
}

موفق باشید.