Avatar billede martinsorensen Nybegynder
19. oktober 2007 - 14:32 Der er 14 kommentarer og
2 løsninger

Kun tal i textbox

Hej eksperter. Jeg vil lave en textbox hvor man kun kan indtaste tal i. Jeg har leget lidt med det selv, men vil gerne fange det allerede under indtastningen. Så vidt jeg kan finde ud af skal jeg fange de i:

private void textBox_KeyDown(object sender, System.Windows.Forms.KeyEventArgs e)

Men hvor skal jeg ligge denne i min kode så den bliver kørt når man indtaster i textboxen?

Eller hvis i har en bedre metode må i også meget gerne komme med inputs.

Mvh

Martin
Avatar billede Syska Mester
19. oktober 2007 - 14:38 #1
OnKeyDown ... på din textboks ...

Du kan også bruge MaskedTextbox som er med i .NET 2.0

// ouT
Avatar billede martinsorensen Nybegynder
19. oktober 2007 - 14:44 #2
Ja, men hvordan laver jeg en on keydown på min textbox. (Jeg kender koden) men hvor j
eg skal indsætte koden henne. Kan sipelthen ikke få det til at virke!

Mvh
Avatar billede Syska Mester
19. oktober 2007 - 14:50 #3
Det er jo en event til din tekstbox ...

Button1.KeyDown +=

Hvis du bruger VS.NET kan ligger den ved siden af properties ... (sådan et gult lyn)

// ouT
Avatar billede martinsorensen Nybegynder
19. oktober 2007 - 14:52 #4
Det jeg mener er:

Hvis jeg har denne kode på min form:

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;

namespace WindowsApplication1
{
    public partial class Form3 : Form
    {
        public Form3()
        {
            InitializeComponent();
        }

    }
}


I den er der indsat en textbox, textBox1

Hvordan får jeg så følgende til at virke på textboxen?


private bool nonNumberEntered = false;

private void textBox1_KeyDown(object sender, System.Windows.Forms.KeyEventArgs e)
{
    nonNumberEntered = false;

    if (e.KeyCode < Keys.D0 || e.KeyCode > Keys.D9)
    {

        if (e.KeyCode < Keys.NumPad0 || e.KeyCode > Keys.NumPad9)
        {

            if(e.KeyCode != Keys.Back)
            {

                nonNumberEntered = true;
            }
        }
    }
}

private void textBox1_KeyPress(object sender, System.Windows.Forms.KeyPressEventArgs e)
{
    if (nonNumberEntered == true)
    {
        e.Handled = true;
    }
}
Avatar billede martinsorensen Nybegynder
19. oktober 2007 - 15:01 #5
Jeg tænker det måske skal ind under dette?

namespace WindowsApplication1
{
    partial class Form3
    {
        /// <summary>
        /// Required designer variable.
        /// </summary>
        private System.ComponentModel.IContainer components = null;

        /// <summary>
        /// Clean up any resources being used.
        /// </summary>
        /// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>
        protected override void Dispose(bool disposing)
        {
            if (disposing && (components != null))
            {
                components.Dispose();
            }
            base.Dispose(disposing);
        }

        #region Windows Form Designer generated code

        /// <summary>
        /// Required method for Designer support - do not modify
        /// the contents of this method with the code editor.
        /// </summary>
        private void InitializeComponent()
        {
            this.textBox1 = new System.Windows.Forms.TextBox();
            this.SuspendLayout();
            //
            // textBox1
            //
            this.textBox1.Location = new System.Drawing.Point(106, 122);
            this.textBox1.Name = "textBox1";
            this.textBox1.Size = new System.Drawing.Size(100, 20);
            this.textBox1.TabIndex = 0;
            //
            // Form3
            //
            this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
            this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
            this.ClientSize = new System.Drawing.Size(292, 266);
            this.Controls.Add(this.textBox1);
            this.Name = "Form3";
            this.Text = "Form3";
            this.ResumeLayout(false);
            this.PerformLayout();

        }

        #endregion

        private System.Windows.Forms.TextBox textBox1;
    }
}
Avatar billede martinsorensen Nybegynder
19. oktober 2007 - 15:03 #6
Jeg har skrevet denne:

this.textBox1.KeyDown += new System.Windows.Forms.KeyEventHandler(textBox1_KeyDown);

Men man kan stadig indtaste bogstavet i textboxen???

Mvh
Avatar billede Syska Mester
19. oktober 2007 - 15:05 #7
this.textBox1.KeyDown += new System.Windows.Forms.KeyEventHandler(this.textBox1_KeyDown);
            this.textBox1.KeyPress += new System.Windows.Forms.KeyPressEventHandler(this.textBox1_KeyPress);

Som ligger i Form1.Designer.cs ....

Hvis du i designer trykke på din textbox ... trykker på properties ... og så over på event ... og så vælge de 2 method som skal være assigned KeyDown og KeyPress

// ouT
Avatar billede Syska Mester
19. oktober 2007 - 15:06 #8
Det er fordi din textboks ikke kender til de 2 Methods du har oprettet ...

I designeren kan du tildele dem til din Button events ...

// ouT
Avatar billede martinsorensen Nybegynder
19. oktober 2007 - 15:11 #9
SÅDAN :D

Så virker det! Smid et svar!!!

1000 TAK FOR HJÆLPEN!
Avatar billede martinsorensen Nybegynder
19. oktober 2007 - 15:13 #10
Så ser koden(erne) således ud:

Form3.Designer.cs:

namespace WindowsApplication1
{
    partial class Form3
    {
        /// <summary>
        /// Required designer variable.
        /// </summary>
        private System.ComponentModel.IContainer components = null;

        /// <summary>
        /// Clean up any resources being used.
        /// </summary>
        /// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>
        protected override void Dispose(bool disposing)
        {
            if (disposing && (components != null))
            {
                components.Dispose();
            }
            base.Dispose(disposing);
        }

        #region Windows Form Designer generated code



        /// <summary>
        /// Required method for Designer support - do not modify
        /// the contents of this method with the code editor.
        /// </summary>
        private void InitializeComponent()
        {
            this.textBox1 = new System.Windows.Forms.TextBox();
            this.SuspendLayout();
            //
            // textBox1
            //
            this.textBox1.Location = new System.Drawing.Point(106, 122);
            this.textBox1.Name = "textBox1";
            this.textBox1.Size = new System.Drawing.Size(100, 20);
            this.textBox1.TabIndex = 0;
            this.textBox1.KeyDown += new System.Windows.Forms.KeyEventHandler(this.textBox1_KeyDown);
            this.textBox1.KeyPress += new System.Windows.Forms.KeyPressEventHandler(this.textBox1_KeyPress);
            //
            // Form3
            //
            this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
            this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
            this.ClientSize = new System.Drawing.Size(292, 266);
            this.Controls.Add(this.textBox1);
            this.Name = "Form3";
            this.Text = "Form3";
            this.ResumeLayout(false);
            this.PerformLayout();

        }
        #endregion

        private System.Windows.Forms.TextBox textBox1;
    }
}


Form3.cs

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;

namespace WindowsApplication1
{
    public partial class Form3 : Form
    {
        private bool nonNumberEntered = false;

        public Form3()
        {
            InitializeComponent();
        }

        private void textBox1_KeyDown(object sender, System.Windows.Forms.KeyEventArgs e)
        {
            nonNumberEntered = false;

            if (e.KeyCode < Keys.D0 || e.KeyCode > Keys.D9)
            {
                if (e.KeyCode < Keys.NumPad0 || e.KeyCode > Keys.NumPad9)
                {
                    if (e.KeyCode != Keys.Back)
                    {
                        nonNumberEntered = true;
                    }
                }
            }
        }
        private void textBox1_KeyPress(object sender, System.Windows.Forms.KeyPressEventArgs e)
        {
            if (nonNumberEntered == true)
            {
                e.Handled = true;
            }
        }
    }
}
Avatar billede Syska Mester
19. oktober 2007 - 15:14 #11
så lidt ...

svar

// ouT
Avatar billede crazysnap Seniormester
19. oktober 2007 - 15:17 #12
Hej martinsorensen,

Du kan også gøre det så simpelt her:


public partial class Form1 : Form
{

    public Form1()
    {
        InitializeComponent();
        this.textBox1.KeyPress += new System.Windows.Forms.KeyPressEventHandler(this.textBox1_KeyPress);
    }

    private void textBox1_KeyPress(object sender, KeyPressEventArgs e)
    {
        string strAllowedChars = "1234567890";

        if (strAllowedChars.IndexOf(e.KeyChar) < 0)
            e.Handled = true;
    }
}


Så kan du specificere præcis hvad der må indtastes i strAllowedChars. :)


Mvh.
- Snap
Avatar billede martinsorensen Nybegynder
19. oktober 2007 - 15:19 #13
Helt korrekt. :D Smid et svar så kan i dele!
Avatar billede lasserasch Juniormester
19. oktober 2007 - 15:19 #14
Havde samme ønske som dig på et tidspunkt.

Jeg valgte at bruge denne 3. parts komponent i stedet for. Det er meget nemmere... Og det virker uden ekstra kodning.

www.skare.com/tekstboxtest.zip

/Lasse
Avatar billede martinsorensen Nybegynder
19. oktober 2007 - 15:22 #15
hov :( Skulle have været crazysnap's point!
Avatar billede crazysnap Seniormester
19. oktober 2007 - 15:25 #16
Det er helt i orden! :) Dit egentlige spørgsmål blev jo også besvaret af buzzzz.

Men glad for du har fået det til at virke.


Mvh.

- Snap
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
IT-kurser om Microsoft 365, sikkerhed, personlig vækst, udvikling, digital markedsføring, grafisk design, SAP og forretningsanalyse.

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester