Wątek przeniesiony 2016-10-24 10:45 z C# i .NET przez ŁF.

TextBox i tylko liczby

0

Witam serdecznie. Jestem początkującym programistą i chciałbym poprosić was o pomoc. Stworzyłem coś takiego do sprawdzania wprowadzanej zawartości do TextBoxa:

  private void TXB_1_KeyDown(object sender, KeyRoutedEventArgs e)
        {
            foreach (char s in this.TXB_1.Text)
            {

                if (e.Handled = ((s) < '0' || (s) > '9'))      //Jeżeli znak nie jest cyfrą zablokuj wprowadzanie

                {
                    TXB_1.BorderBrush = new SolidColorBrush(Color.FromArgb(0xFF, 0xFF, 0, 0)); //Ramka czerwona
                    TXB_2.Text = "Wprowadź tylko cyfry!!!"                                 
                }
                else
                {
                    TXB_1.BorderBrush = new SolidColorBrush(Color.FromArgb(255, 0, 0, 0));  //Ramka czarna
                    TXB_2.Text = ""                                 

                }

            }
        }

Kod nie zachowuje się tak jak bym chciał. Blokuje textboxa dopiero po wprowadzeniu drugiego znaku. A chciałbym już zablokować przy pierwszym błędnym. Piszę aplikację do sklepu windows MetroUi. Używam Visual Studio 2015. Temat był wałkowany mnóstwo razy ale nie znalazłem odpowiedzi. Dzięki z góry za pomoc.

1
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Data;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Imaging;
using System.Windows.Navigation;
using System.Windows.Shapes;

namespace _4programmersWPF
{
    public partial class MainWindow : Window
    {

        public MainWindow()
        {
            InitializeComponent();
        }

        private void textbox_TextChanged(object sender, TextChangedEventArgs e)
        {
            var tb = sender as TextBox;
            var digit = 0;
            if (!int.TryParse(tb.Text, out digit) || tb.Text.Length > 1)
            {
                border.BorderBrush = Brushes.Red;
                tb2.Text = "Insert only digits.";
            }
            else
            {
                border.BorderBrush = Brushes.Black;
                tb2.Text = "";
            }
        }
    }
}
<Window x:Class="_4programmersWPF.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
        xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
        xmlns:local="clr-namespace:_4programmersWPF"
        mc:Ignorable="d"
        Title="4prog test app" Height="370" Width="400"
        Name="Window" WindowStartupLocation="CenterScreen">
  <StackPanel>
    <Border Name="border" BorderThickness="2">
      <TextBox Name="textbox" Height="150"
             TextChanged="textbox_TextChanged"/>
    </Border>
    <TextBox Name="tb2"/>
  </StackPanel>
</Window>

Rozwiązanie, które wcześniej wkleiłem jest uzależnione od focus'a na kontrolce. To nie jest.

0

Zadzałało :) z tym że ta metoda ograniczała mnie do jednej cyfry. Zmieniłem tb.Text.Length > 1, na tb.Text.Length > 10. Dziękuje bardzo za pomoc :)

1 użytkowników online, w tym zalogowanych: 0, gości: 1