نمایش نتایج 1 تا 17 از 17

نام تاپیک: تکست باکس از نوع float

  1. #1

    تکست باکس از نوع float

    سلام
    یه سوال داشتم من چند تا تکست باکس دارم که تعدادشون هم زیاده یک دیتابیس هم دارم که sql server هستش و از نوع float هم تعریف شدن حالا وقتی ثبت رو میزنم ثبت میشه ولی وقتی میخوام ویرایش کنم موقع لود تو صفحه هم تو دیتا گرید هم بعد سلکت کردن تو تکست باکس ها بجای مثلا 1.5 مینویسه 1/5 و ارور میده یعنی بعبارتی مجبورم مثلا 50 تا تکست رو دوباره از اول بنویسم مثلا 1.5 تا اجازه ثبت بده کسی راه حلی داره که از این مشکل خلاص شم؟

  2. #2
    کاربر دائمی آواتار abdullah20
    تاریخ عضویت
    فروردین 1390
    محل زندگی
    اصفهان
    پست
    1,211

    نقل قول: تکست باکس از نوع float

    این مربوط به تنظیمات ویندوز میشه

    Capture.PNG

  3. #3

    نقل قول: تکست باکس از نوع float

    سلام این یکی از راه حلهاشه


    private void textBox1_KeyPress(object sender, KeyPressEventArgs e)
    {
    if (e.KeyChar == '/')
    {
    e.KeyChar='.';
    }
    }


  4. #4

    نقل قول: تکست باکس از نوع float

    نقل قول نوشته شده توسط abdullah20 مشاهده تاپیک
    این مربوط به تنظیمات ویندوز میشه

    Capture.PNG
    ممنون ولی من نمیخوام مجبور بشم به کاربرام بگم تنظیماتشون رو عوض کنن راه حل دیگه ای نداره؟

  5. #5
    کاربر دائمی آواتار abdullah20
    تاریخ عضویت
    فروردین 1390
    محل زندگی
    اصفهان
    پست
    1,211

    نقل قول: تکست باکس از نوع float

    خب میتونید Replace کنید

  6. #6
    مدیر بخش آواتار محمد رضا فاتحی
    تاریخ عضویت
    مهر 1387
    محل زندگی
    کهنسالترین موجود زنده در شهر منه
    پست
    1,181

    نقل قول: تکست باکس از نوع float

    نقل قول نوشته شده توسط ghasemloo مشاهده تاپیک
    سلام این یکی از راه حلهاشه


    private void textBox1_KeyPress(object sender, KeyPressEventArgs e)
    {
    if (e.KeyChar == '/')
    {
    e.KeyChar='.';
    }
    }

    دوست عزیز طبق سوال وقتی اعداد از دیتابیس وارد تکست باکس می شن این اتفاق میوفته این کد شما وقتی کاربرد داره که می خوای عدد رو تایپ کنی...
    باید کد Replace رو در رویداد TextChanged نوشت

  7. #7

    نقل قول: تکست باکس از نوع float

    نقل قول نوشته شده توسط محمد رضا فاتحی مشاهده تاپیک
    دوست عزیز طبق سوال وقتی اعداد از دیتابیس وارد تکست باکس می شن این اتفاق میوفته این کد شما وقتی کاربرد داره که می خوای عدد رو تایپ کنی...
    باید کد Replace رو در رویداد TextChanged نوشت
    راهی نیست که مجبور نشم بالای 80 تا تکست باکس رو واسشون یکی یکی این کد ریپلیس رو بنویسم؟

  8. #8
    مدیر بخش آواتار محمد رضا فاتحی
    تاریخ عضویت
    مهر 1387
    محل زندگی
    کهنسالترین موجود زنده در شهر منه
    پست
    1,181

    نقل قول: تکست باکس از نوع float

    می تونی از کنترل شفارشی استفاده کنی...

    فقط یه نکته...اگه تو این تکسباکس ها از رویداد TextChange استفاده نکردی اینکار رو بکن
    یه کلاس ایجاد بکن

    class MyTextBox:TextBox
    {
    protected override void OnTextChanged(EventArgs e)
    {
    base.Text = base.Text.Replace("/", ".");
    base.SelectionStart = base.TextLength;
    }
    }


    و بعد از بیلد کردن پروژه یه کنترل اضافه می شه می تونی از اون به جای تکسباکس ها استفاده کنی...
    راه حل بهتری الان به ذهنم نمی رسه

  9. #9

    نقل قول: تکست باکس از نوع float

    نقل قول نوشته شده توسط محمد رضا فاتحی مشاهده تاپیک
    می تونی از کنترل شفارشی استفاده کنی...

    فقط یه نکته...اگه تو این تکسباکس ها از رویداد TextChange استفاده نکردی اینکار رو بکن
    یه کلاس ایجاد بکن

    class MyTextBox:TextBox
    {
    protected override void OnTextChanged(EventArgs e)
    {
    base.Text = base.Text.Replace("/", ".");
    base.SelectionStart = base.TextLength;
    }
    }


    و بعد از بیلد کردن پروژه یه کنترل اضافه می شه می تونی از اون به جای تکسباکس ها استفاده کنی...
    راه حل بهتری الان به ذهنم نمی رسه
    شرمنده ولی یک سوال دستوری نداریم که وقتی فرم لود میشه windows decimal symbol رو تغییر بده به . و وقتی فرم بسته میشه برش گردونه به / یعنی دستور رو بذارم تو فرم لود windows decimal symbol بشه . و وقتی دستور رو بذارم تو فرم کلوز windows decimal symbol بشه / ؟؟؟؟....

  10. #10

    نقل قول: تکست باکس از نوع float

    نقل قول نوشته شده توسط ghasemloo مشاهده تاپیک
    سلام این یکی از راه حلهاشه


    private void textBox1_KeyPress(object sender, KeyPressEventArgs e)
    {
    if (e.KeyChar == '/')
    {
    e.KeyChar='.';
    }
    }

    این روش جوابگو نیست چون وقتی از دیتا گرید لود میکنه باز هم / لود میشه تو تکست باکس و چون دیتا بیس از نوع float هستش ارور میده و اجازه ویرایش نمیده مگه اینکه دوباره اون اعداد رو بنویسیم

  11. #11

    نقل قول: تکست باکس از نوع float

    در فارسی ممیز رو با / نمایش میدن. در نمایش فکر نمیکنم مشکلی باشه که / نمایش داده بشه. اما برای ثبت در دیتابیس و یا ویرایش باید کد را طوری بنویسید که مستقل از Culture و فرمت انتخابی در ویندوز ثبت انجام بشه.
    کد ثبت و ویرایش رو بزارید.

  12. #12

    نقل قول: تکست باکس از نوع float

    نقل قول نوشته شده توسط Mahmoud.Afrad مشاهده تاپیک
    در فارسی ممیز رو با / نمایش میدن. در نمایش فکر نمیکنم مشکلی باشه که / نمایش داده بشه. اما برای ثبت در دیتابیس و یا ویرایش باید کد را طوری بنویسید که مستقل از Culture و فرمت انتخابی در ویندوز ثبت انجام بشه.
    کد ثبت و ویرایش رو بزارید.
    کد برای ثبت :
    con.ExecuteNonQuery("Insert into dbo.Formula values(N'" + TxtSerial.Text + "',N'" + dateTimePickerStart.Text + "'," +                                "N'" + dateTimePickerEnd.Text + "',N'" + TxtFormul.Text + "',N'" + ComboMahsul.Text + "'" +
    ",N'" + ComboKala.Text + "',N'" + ComboNoe.Text + "'" +
    ",N'" + TxtKhoshk.Text + "',N'" + TxtEnergyFa.Text + "'" +
    ",N'" + TxtCharbi.Text + "',N'" + TxtProtein.Text + "'" +
    ",N'" + TxtFibr.Text + "',N'" + TxtKhakestar.Text + "'" +
    ",N'" + TxtKalsium.Text + "',N'" + TxtPhosphor.Text + "'" +
    ",N'" + TxtPhosphorQ.Text + "',N'" + TxtDryMatter.Text + "'" +
    ",N'" + TxtEnergyME.Text + "',N'" + TxtEtherExtract.Text + "'" +
    ",N'" + TxtCrudeProtein.Text + "',N'" + TxtCrudeFiber.Text + "'" +
    ",N'" + TxtCalcium.Text + "',N'" + TxtTotalPh.Text + "'" +
    ",N'" + TxtAvaPhosphrous.Text + "',N'" + TxtSodium.Text + "'" +
    ",N'" + TxtPotassium.Text + "',N'" + TxtChloride.Text + "'" +
    ",N'" + TxtDCAB.Text + "',N'" + TxtCholine.Text + "'" +
    ",N'" + TxtLinoleicAcid.Text + "',N'" + TxtLysineTotal.Text + "'" +
    ",N'" + TxtMethionineTotal.Text + "',N'" + TxtMetCysTotal.Text + "'" +
    ",N'" + TxtThreonineTotal.Text + "',N'" + TxtTryptophanTotal.Text + "'" +
    ",N'" + TxtArgenineTotal.Text + "',N'" + TxtIsoleucineTotal.Text + "'" +
    ",N'" + TxtLeucineTotal.Text + "',N'" + TxtValineTotal.Text + "'" +
    ",N'" + TxtLysineSID.Text + "',N'" + TxtMethionineSID.Text + "'" +
    ",N'" + TxtMetCysSID.Text + "',N'" + TxtThreonineSID.Text + "'" +
    ",N'" + TxtTryptophanSID.Text + "',N'" + TxtArgenineSID.Text + "'" +
    ",N'" + TxtIsoleucineSID.Text + "',N'" + TxtLeucineSID.Text + "'" +
    ",N'" + TxtValineSID.Text + "',N'" + TxtAsh.Text + "'" +
    ",N'" + TxtStarch.Text + "',N'" + TxtSugar.Text + "'" +
    ",N'" + TxtNFE.Text + "',N'" + TxtTozihKhorak.Text + "'" +
    ")", 1);


    کد برای ویرایش
    //ویرایش دیتاگرید

    if (RowId != "0")
    {
    if (
    MessageBox.Show("آیا رکورد انتخاب شده ویرایش گردد؟", "ویراش", MessageBoxButtons.YesNo,
    MessageBoxIcon.Question) == DialogResult.Yes)
    {
    con.ExecuteNonQuery(
    "update Formula set Seriall = N'" +
    TxtSerial.Text + "', Tarikh_start = N'" +
    dateTimePickerStart.Text + "' , Tarikh_End = N'" +
    dateTimePickerEnd.Text + "' , Shomare_Furmula = N'" +
    TxtFormul.Text + "', Name_Mahsul = N'" +
    ComboMahsul.Text + "', Name_Kala = N'" +
    ComboKala.Text + "', Noe = N'" +
    ComboNoe.Text + "', Madde_khoshk = N'" +
    TxtKhoshk.Text + "', Energy_Fa = N'" +
    TxtEnergyFa.Text + "', Charbi = N'" +
    TxtCharbi.Text + "', Protein = N'" +
    TxtProtein.Text + "', Fibr = N'" +
    TxtFibr.Text + "', Khakestar = N'" +
    TxtKhakestar.Text + "', Kalsiom = N'" +
    TxtKalsium.Text + "', Phosphor_Kol = N'" +
    TxtPhosphor.Text + "', Phosphor_qabel = N'" +
    TxtPhosphorQ.Text + "', Dry_Matter = N'" +
    TxtDryMatter.Text + "', Energy_ME = N'" +
    TxtEnergyME.Text + "', Ether_Extract = N'" +
    TxtEtherExtract.Text + "', Crude_Protein = N'" +
    TxtCrudeProtein.Text + "', Crude_Fiber = N'" +
    TxtCrudeFiber.Text + "', Calcium = N'" +
    TxtCalcium.Text + "', Total_Ph = N'" +
    TxtTotalPh.Text + "', Ava_Phosphrous = N'" +
    TxtAvaPhosphrous.Text + "', Sodium = N'" +
    TxtSodium.Text + "', Potassium = N'" +
    TxtPotassium.Text + "', Chloride = N'" +
    TxtChloride.Text + "', DCAB = N'" +
    TxtDCAB.Text + "', Choline = N'" +
    TxtCholine.Text + "', Linoleic_Acid = N'" +
    TxtLinoleicAcid.Text + "', Lysine_Total = N'" +
    TxtLysineTotal.Text + "', Methionine_Total = N'" +
    TxtMethionineTotal.Text + "', Met_Cys_Total = N'" +
    TxtMetCysTotal.Text + "', Threonine_Total = N'" +
    TxtThreonineTotal.Text + "', Tryptophan_Total = N'" +
    TxtTryptophanTotal.Text + "', Argenine_Total = N'" +
    TxtArgenineTotal.Text + "', Isoleucine_Total = N'" +
    TxtIsoleucineTotal.Text + "', Leucine_Total = N'" +
    TxtLeucineTotal.Text + "', Valine_Total = N'" +
    TxtValineTotal.Text + "', Lysine_SID = N'" +
    TxtLysineSID.Text + "', Methionine_SID = N'" +
    TxtMethionineSID.Text + "', Met_Cys_SID = N'" +
    TxtMetCysSID.Text + "', Threonine_SID = N'" +
    TxtThreonineSID.Text + "', Tryptophan_SID = N'" +
    TxtTryptophanSID.Text + "', Argenine_SID = N'" +
    TxtArgenineSID.Text + "', Isoleucine_SID = N'" +
    TxtIsoleucineSID.Text + "', Leucine_SID = N'" +
    TxtLeucineSID.Text + "', Valine_SID = N'" +
    TxtValineSID.Text + "', Ash = N'" +
    TxtAsh.Text + "', Starch = N'" +
    TxtStarch.Text + "', Sugar = N'" +
    TxtSugar.Text + "', NFE = N'" +
    TxtNFE.Text + "', Molahezat_Khurak = N'" +
    TxtTozihKhorak.Text + "' where ID = '" + RowId + "'", 1);


    البته این یکی از فرمها هستش 4تا فرم دیگه مثل این موجوده

  13. #13

    نقل قول: تکست باکس از نوع float

    متن خطا رو نزاشتید!
    فکر کنم خطا به دلیل تک کوتیشن هایی هست که دو طرف مقادیر عددی قرار دادید.
    توی این کد اصلا معلوم نیست کدوم ستون از نوع float هست. و اینو هم در نظر داشته باشید برای مقدار دادن به ستون هایی که از نوع عددی هستند به N' ' نیاز نیست ( ' ' در sql نشاندهنده رشته و کاراکتر هست)

    نحوه کد نویسی شما علاوه بر عدم امنیت، مستعد خطای معنایی هم هست. فرض کنید میخواهید عدد 1/5 (یک ممیز پنج در فرمت فارسی) رو در ستون amount ذخیره کنید. خب بعد از الحاق عدد به کوئری، دستور به این شکل در میاد
    insert into tbl(amount) values(1/25)

    اما در sql / به معنی تقسیم هست و در نتیجه مقدار صحیح 0 ذخیره خواهد شد. برای پرهیز از این نوع اشکالات حتما کوئری رو به صورت پارامتری بنویسید

    float amountValue = Convert.ToSingle(textBox1.Text);

    _command.CommandText = "insert into tbl(amount) values(@a)";
    _command.Parameters.AddWithValue("@a", amountValue);





    برای نمایش نقطه . به جای / در اعداد دارای ممیز باید از culture مناسب استفاده کنید. برای تغییر culture میتونید در شروع برنامه در تابع main خط زیر رو اضافه کنید
    Application.CurrentCulture = CultureInfo.InvariantCulture;


    هر جا به فرمت فارسی نیاز داشتید از کلاس Culture میتونید استفاده کنید.

  14. #14

    نقل قول: تکست باکس از نوع float

    هنوز یک سوال اساسی باقی هستش هیچ راهی وجود نداری که بگیم تکست باکسهای ما همشون از نوع float هستن؟ شاید با این کار کلا مشکل حل بشه؟!!!!

  15. #15

    نقل قول: تکست باکس از نوع float

    نقل قول نوشته شده توسط Mahmoud.Afrad مشاهده تاپیک
    متن خطا رو نزاشتید!
    فکر کنم خطا به دلیل تک کوتیشن هایی هست که دو طرف مقادیر عددی قرار دادید.
    توی این کد اصلا معلوم نیست کدوم ستون از نوع float هست. و اینو هم در نظر داشته باشید برای مقدار دادن به ستون هایی که از نوع عددی هستند به N' ' نیاز نیست ( ' ' در sql نشاندهنده رشته و کاراکتر هست)

    نحوه کد نویسی شما علاوه بر عدم امنیت، مستعد خطای معنایی هم هست. فرض کنید میخواهید عدد 1/5 (یک ممیز پنج در فرمت فارسی) رو در ستون amount ذخیره کنید. خب بعد از الحاق عدد به کوئری، دستور به این شکل در میاد
    insert into tbl(amount) values(1/25)

    اما در sql / به معنی تقسیم هست و در نتیجه مقدار صحیح 0 ذخیره خواهد شد. برای پرهیز از این نوع اشکالات حتما کوئری رو به صورت پارامتری بنویسید

    float amountValue = Convert.ToSingle(textBox1.Text);

    _command.CommandText = "insert into tbl(amount) values(@a)";
    _command.Parameters.AddWithValue("@a", amountValue);





    برای نمایش نقطه . به جای / در اعداد دارای ممیز باید از culture مناسب استفاده کنید. برای تغییر culture میتونید در شروع برنامه در تابع main خط زیر رو اضافه کنید
    Application.CurrentCulture = CultureInfo.InvariantCulture;


    هر جا به فرمت فارسی نیاز داشتید از کلاس Culture میتونید استفاده کنید.
    مشکل من هنگام ثبت اولیه نیست هنگام ثبت اولیه درست ثبت میشه ولی وقتی تو دیتا گرید انتخاب میکنم که ویرایشش کنم خطا میده که نتونست تو دیتابیس ثبت کنه چون موقع ثبت اولیه 1.5 رو میزنم ولی موقع لود کردن تو تکست باکسها برای ویرایش 1/5 رو لود میکنه اصلا مشکلی با فارسی یا انگلیسی بودنش هم ندارم موضوع اینه که تو ویندوز xp و 7 آیتم decimal symbol داخل کنترل پنل . هست ولی رو ویندوز 10 آیتم decimal symbol تبدیل شده به / و هنگام لود کردن جای . میاد / لود میکنه
    در ضمن میشه بیشتر توضیح بدین چرا گفتین عدم امنیت؟!
    آخرین ویرایش به وسیله cnmeysam : سه شنبه 10 آذر 1394 در 02:09 صبح

  16. #16

    نقل قول: تکست باکس از نوع float

    از
    Application.CurrentCulture = CultureInfo.InvariantCulture;

    هم نمیتونم استفاده کنم چون جدا کننده تقویمم رو بهم میریزه و باز هم موقع لود تو dateTimePickerStart ارور میده بنظر خود من منطقی ترین راهش اینه که دستوری نوشته بشه که هنگام لود فرم بگیم decimal symbol ویندوز رو چک کنه و اگه / بود اون رو تبدیل به . کنه اونوقت کل مشکل حل میشه
    اصلا راهی هست که بشه اینکار رو انجام داد؟ چون همونطور که دوستمون abdullah20 تو عکس گذاشتن با عوض کردن اون آیتم کلا مشکل حل میشه
    آخرین ویرایش به وسیله Mahmoud.Afrad : سه شنبه 10 آذر 1394 در 03:17 صبح

  17. #17

    نقل قول: تکست باکس از نوع float

    خب، پس هنگام ارسال داده به جدول براساس جداکننده ای که در رشته هست باید تبدیل انجام بشه.
    برای دقت و راحتی و دسته بندی کدها یک کلاس و توی اون متد استاتیک ایجاد کنید برای دریافت رشته و تحویل گرفتن عدد با نوع مناسب.
    هر جا خواستید رشته به عدد تبدیل بشه کافیه از متد استفاده کنید.
    مثلا یک کلاس به صورت زیر به پروژه اضافه کنید

    public static class ConvertHelper
    {
    public static float StringToFloat(this string strNumber)
    {
    float output = 0;
    bool isInCorrectFormat = false;
    System.Globalization.NumberStyles style = System.Globalization.NumberStyles.Float;

    foreach (var c in CultureInfo.GetCultures(CultureTypes.AllCultures))
    {
    if (float.TryParse(strNumber, style, c, out output))
    {
    isInCorrectFormat = true;
    break;
    }
    }
    if (!isInCorrectFormat)
    {
    throw new FormatException();
    }
    return output;
    }
    }

    متد StringToFloat بر همه cultureها رو امتحان میکنه و هر کدوم جواب داد مقدار رو برمیگردونه.
    به صورت زیر هم میتونید استفاده کنید

    _command.CommandText = "insert into tbl(amount) values(@a)";

    try
    {
    float amountValue = textBox1.Text.StringToFloat();
    _command.Parameters.AddWithValue("@a", amountValue);
    }
    catch (Exception ex)
    {
    MessageBox.Show(ex.Message);
    }


    این رو هم مد نظر قرار بدید که دوباره این عدد رو به رشته تبدیل و یا به رشته الحاق نکنید چون دوباره همون مشکل ایجاد میشه. پس حتما به صورت پارامتری مقادیر رو ارسال کنید.

    و اینکه میگید حجم کارتون زیاد میشه ، اگر لایه منطق رو از لایه دسترسی به داده ها جدا میکردید تغییرات کمتری نیاز بود.

تاپیک های مشابه

  1. سوال: پاک کردن تکست باکس از جایی موس کلیک شده
    نوشته شده توسط farzade در بخش C#‎‎
    پاسخ: 1
    آخرین پست: سه شنبه 03 آذر 1388, 10:07 صبح
  2. انتقال مقادیر تکست باکس از یک فرم به فرم دیگر
    نوشته شده توسط shima2006 در بخش C#‎‎
    پاسخ: 2
    آخرین پست: یک شنبه 04 مرداد 1388, 12:12 عصر
  3. گرفتن متن تکست باکس از مرورگر
    نوشته شده توسط mazy12 در بخش برنامه نویسی در 6 VB
    پاسخ: 14
    آخرین پست: پنج شنبه 26 دی 1387, 15:04 عصر
  4. تکسن باکس از نوع Xp
    نوشته شده توسط ehsan_2000 در بخش برنامه نویسی در 6 VB
    پاسخ: 3
    آخرین پست: یک شنبه 07 اسفند 1384, 23:30 عصر
  5. انتخاب چند چک باکس از نوع yes , no با هم
    نوشته شده توسط saras در بخش Access
    پاسخ: 6
    آخرین پست: سه شنبه 15 شهریور 1384, 23:00 عصر

قوانین ایجاد تاپیک در تالار

  • شما نمی توانید تاپیک جدید ایجاد کنید
  • شما نمی توانید به تاپیک ها پاسخ دهید
  • شما نمی توانید ضمیمه ارسال کنید
  • شما نمی توانید پاسخ هایتان را ویرایش کنید
  •