C#nedir?com Homepage
Forum Home Forum Home > C# / .NET > Visual C#
  New Posts New Posts RSS Feed - para girişi yapılabilen textbox
  FAQ FAQ  Forum Search   Events   Register Register  Login Login

para girişi yapılabilen textbox

 Post Reply Post Reply
   

Author
Message
operator View Drop Down
Senior Member
Senior Member


Joined: 03 Nisan 2007
Status: Offline
Points: 301
Post Options Post Options   Thanks (0) Thanks(0)   Quote operator Quote  Post ReplyReply Direct Link To This Post Topic: para girişi yapılabilen textbox
    Posted: 06 Aralık 2010 at 17:09

Merhaba. Projem için sadece para girşi yapılabilecek bir textbox controlü oluşturuyorum. Ama küsüratları girmede sorun yaşıyorum. Kod aşağıda. Bunu nasıl düzeltebilirim. Teşekkürler..

private void txtpara_KeyPress(object sender, KeyPressEventArgs e)

{

if (char.IsDigit(e.KeyChar) == false && char.IsControl(e.KeyChar) == false)

if(e.KeyChar != ',')

e.Handled = true;

}

private void txtpara_TextChanged(object sender, EventArgs e)

{

if (txtpara.Text == "") txtpara.Text = "0";

decimal sayi = Convert.ToDecimal(txtpara.Text);

txtpara.Text = sayi.ToString("##,##.##");

txtpara.SelectionStart = txtpara.Text.Length;

}

bu kodda girişi de parasal formatta gösteriyor. Fakat küsüratları giremiyorum. Teşekküler..
Back to Top
korsbay View Drop Down
Newbie
Newbie


Joined: 31 Mayıs 2010
Location: Turkey
Status: Offline
Points: 12
Post Options Post Options   Thanks (0) Thanks(0)   Quote korsbay Quote  Post ReplyReply Direct Link To This Post Posted: 07 Aralık 2010 at 02:55
Bu işlemi normal textbox yerine, kendin component yaratarak daha kolay yapabilirsin....

Kendi yaptıgım dll:http://hotfile.com/dl/87671181/49c66ac/Controls.dll.html
İçinde NumericFloatTextBox, NumericIntTextBox, UpperComboBox ve UpperTextBox var...NumericFloatTextBox isini gorur...

Örnek kod:

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Diagnostics;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Globalization;

namespace Controls
{
    public partial class NumericFloatTextBox : TextBox
    {
        bool allowSpace = false;
        int nokta_kontrol = 0;

        // Restricts the entry of characters to digits (including hex), the negative sign,
        // the decimal point, and editing keystrokes (backspace).
        protected override void OnKeyPress(KeyPressEventArgs e)
        {
            base.OnKeyPress(e);
           
            NumberFormatInfo numberFormatInfo = System.Globalization.CultureInfo.CurrentCulture.NumberFormat;
            string decimalSeparator = numberFormatInfo.NumberDecimalSeparator;
            string groupSeparator = numberFormatInfo.NumberGroupSeparator;
            string negativeSign = numberFormatInfo.NegativeSign;

            string keyInput = e.KeyChar.ToString();
          
            if (Char.IsDigit(e.KeyChar))
            {
                // Digits are OK
              
            }

            else if (e.KeyChar.Equals(',') && nokta_kontrol == 0 && this.Text.Length != 0)
            {
                nokta_kontrol = 1;
              
                // Decimal separator is OK
            }
            else if ((e.KeyChar == '\b') )
            {
                     if (this.Text.Length != 0)
                     {
                         Char a = this.Text[this.Text.Length - 1];
                        
                         if (a.Equals(',') || a.Equals('-'))
                         { 
                             nokta_kontrol = 0;
                         }
                     }
                         // Backspace key is OK
            }
            //    else if ((ModifierKeys & (Keys.Control | Keys.Alt)) != 0)
            //    {
            //     // Let the edit control handle control and alt key combinations
            //    }
            else if (this.allowSpace && e.KeyChar == ' ')
            {

            }
            else
            {
                // Consume this invalid key and beep
                e.Handled = true;
                //    MessageBeep();
            }
        }

        public int IntValue
        {
            get
            {
                return Int32.Parse(this.Text);
            }
        }

        public decimal DecimalValue
        {
            get
            {
                return Decimal.Parse(this.Text);
            }
        }

        public bool AllowSpace
        {
            set
            {
                this.allowSpace = value;
            }

            get
            {
                return this.allowSpace;
            }
        }
    }

}

Back to Top
operator View Drop Down
Senior Member
Senior Member


Joined: 03 Nisan 2007
Status: Offline
Points: 301
Post Options Post Options   Thanks (0) Thanks(0)   Quote operator Quote  Post ReplyReply Direct Link To This Post Posted: 07 Aralık 2010 at 09:22
cebanı için sağol. Fakat benim yapmaya çalıştığım şey bu değil. ben para değerini yazarkenke basamaklama yapmasını istiyorum. örneğin 123 yazınca aynı kalıyor, 1234 yazınca otomatik 1.234 şeklini alacak. sonra 5'e bastım diyelim 12.345 olacak. bunun gibi. aslında #,## formatı  bu işi yapıyor ama küsürat kısmını girdirmiyor bunda da.
Yinede teşekkürler..
Back to Top
korsbay View Drop Down
Newbie
Newbie


Joined: 31 Mayıs 2010
Location: Turkey
Status: Offline
Points: 12
Post Options Post Options   Thanks (0) Thanks(0)   Quote korsbay Quote  Post ReplyReply Direct Link To This Post Posted: 07 Aralık 2010 at 14:05
anladım, sen floattan ziyade direk para gosterimi istiyorsun...senin dedigin gibi calısacak sekilde kodunu duzelttim...
Hatanın sebebi, ',' karakterini alıyorsun ama gormuyorsun.bunun icin bool tipinde 2 degisken ekledim:

Quote
        bool isfloat = false;
        bool floatt = false;


        private void textBox1_KeyPress(object sender, KeyPressEventArgs e)
        {
            if (char.IsDigit(e.KeyChar) == false && char.IsControl(e.KeyChar) == false)
            {
                if (e.KeyChar != ',')
                    e.Handled = true;
                else
                    isfloat = true;

            }
            else if (isfloat)
            {
                floatt = true;
                isfloat = false;
            }

        }



        private void txtpara_TextChanged(object sender, EventArgs e)
        {
            if (textBox1.Text == "") textBox1.Text = "0";
            decimal sayi = Convert.ToDecimal(textBox1.Text);
            if (floatt)
            {
                sayi /= 10;
                floatt = false;
            }

            textBox1.Text = sayi.ToString("##,##.##");
            textBox1.SelectionStart = textBox1.Text.Length;
        }

Back to Top
operator View Drop Down
Senior Member
Senior Member


Joined: 03 Nisan 2007
Status: Offline
Points: 301
Post Options Post Options   Thanks (0) Thanks(0)   Quote operator Quote  Post ReplyReply Direct Link To This Post Posted: 07 Aralık 2010 at 15:25
cevap için sağol.elinize sağlık. Bende format (#.##,##) bırakıp kendim bir fonksiyon yazdım bu iş için. Öyle hallettim. Kendi yazdığım daha hoş oldu gibi geldi bana(herhalde kendi emeğim olunca)
 
Birde şunu merak ettim biliyomusun acaba. virgüle basına virgül görünmüyor ardından sayı yazınca görünüyor. Birde virgülden sonra 0 a basına virgülü almıyor.
Tekrar teşekkürler..
Back to Top
korsbay View Drop Down
Newbie
Newbie


Joined: 31 Mayıs 2010
Location: Turkey
Status: Offline
Points: 12
Post Options Post Options   Thanks (0) Thanks(0)   Quote korsbay Quote  Post ReplyReply Direct Link To This Post Posted: 08 Aralık 2010 at 01:44
insanın kendi emegi gibisi yok tabi:)

o olay,
            decimal sayi = Convert.ToDecimal(textBox1.Text);
bu satırla alakalı.
"3," yazarsan sayı=3 oluyor.
"3,4" yazarsan sayı=3,4 oluyor.
"3,0" yazarsan sayı=3 oluyor.

benim duzelttigim haliylede bu sekilde calısıyor.Bunun olmaması icin daha ayrıntılı kontrol lazım.yapamazsan, yardımcı olmaya calısırım...

yada o satırın degistirilip, baska islem yapman gerekiyor.Bu islem icin farklı bir kısayol bilmiyorum.Belki fonksiyon veya kendi yazacagın kod parcası ile cozebilirsin...
Back to Top
spearfish View Drop Down
Senior Member
Senior Member


Joined: 14 Temmuz 2010
Status: Offline
Points: 412
Post Options Post Options   Thanks (0) Thanks(0)   Quote spearfish Quote  Post ReplyReply Direct Link To This Post Posted: 10 Ocak 2011 at 17:05
normal caly?yyo fakat silme is?lemi yada bir kaç i?lem ypayldygynda bazen ?u hata ile kar?yla?yyorumç

hatasatyry

caritextBox12.Text = sayi.ToString("##,##.##");

hatamesajy

An unhandled exception of type 'System.StackOverflowException' occurred in System.Windows.Forms.dll
Back to Top
Favemar View Drop Down
Senior Member
Senior Member


Joined: 12 Ekim 2010
Status: Offline
Points: 1242
Post Options Post Options   Thanks (0) Thanks(0)   Quote Favemar Quote  Post ReplyReply Direct Link To This Post Posted: 11 Ocak 2011 at 10:39
Changed özelli?inde text in de?erini de?i?tirirsen kysyr döngüye sokarsyn
Metin SARI - Bilgisayar Mühendisi    Özelden ödev ve programlama sorusu sormayınız!
Back to Top
 Post Reply Post Reply
  Share Topic   
   


Forum Jump Forum Permissions View Drop Down

Forum Software by Web Wiz Forums® version 11.01
Copyright ©2001-2014 Web Wiz Ltd.