none
Замена запятой на точку RRS feed

  • Вопрос

  • Подскажите пожалуйста пытаюсь заменить запятую на точку, но у меня не заменяет, а добавляет в строку. Т.е. добавка так и запланирована. Но должна добавляться точка, а не запятая.

    Делаю так:

    try

    {

    if (e.Key == Key.Decimal)
                    {
                        TxtBEnter1.Text = TxtBEnter1.Text + string.Format("{0}"".");
                    }

    }

    catch
                {
                    e.Handled = true;
                }

    Результат нажатия на точку в цифровой клаве (например 89+56,.) а должно быть 89+56.

    14 марта 2012 г. 11:48

Ответы

  • Бррр. Попробуйте ещё выделить кусок текста и сделать тоже самое - скорее всего тоже будет бага. А вообще e.Handled = true; нужно было в if добавить, а не в catch.

    TextBox tb...

    txt.PreviewTextInput += (o, e) =>

    ...

    var dN = tb.Text.Remove(tb.SelectionStart, tb.SelectionLength).Insert(tb.CaretIndex, e.Text);
    e.Handled = true;

    • Предложено в качестве ответа Abolmasov Dmitry 14 марта 2012 г. 12:09
    • Помечено в качестве ответа developers_s 14 марта 2012 г. 12:09
    14 марта 2012 г. 12:00
    Отвечающий

Все ответы

  • > пытаюсь заменить запятую на точку, но у меня не заменяет, а добавляет в строку.
     
     
    e.Handled = true; перенесите под TxtBEnter1.Text = ...;
     
     
    • Предложено в качестве ответа Abolmasov Dmitry 14 марта 2012 г. 12:09
    14 марта 2012 г. 11:56
  • Бррр. Попробуйте ещё выделить кусок текста и сделать тоже самое - скорее всего тоже будет бага. А вообще e.Handled = true; нужно было в if добавить, а не в catch.

    TextBox tb...

    txt.PreviewTextInput += (o, e) =>

    ...

    var dN = tb.Text.Remove(tb.SelectionStart, tb.SelectionLength).Insert(tb.CaretIndex, e.Text);
    e.Handled = true;

    • Предложено в качестве ответа Abolmasov Dmitry 14 марта 2012 г. 12:09
    • Помечено в качестве ответа developers_s 14 марта 2012 г. 12:09
    14 марта 2012 г. 12:00
    Отвечающий
  • Здравсвтуйте.

    Вы используете WinForms или WPF, какоие событие текстового поля обрабатываете?

    Главная ошибка как уже сказал - вам нужно перенести e.Handled в блок if, тем самым вы указываете что сами обработали добавления символа, и дальшейшая обработка события не требуется.


    Для связи [mail]

    14 марта 2012 г. 12:09
  • WPF у меня. Перенёс e.Handled и сделал код по Anton.Maksimov

    Реально работает. Тока цифры перестали вводиться с цифровой клавы.

    И помогите разобраться в сути:

    txt.PreviewTextInput += (o, e) => это я так понимаю событие или нет? Потому как цифры с цифровой клавиатуры перестали вводится может не надо было это событие заводить?

    private void TxtBEnter1_PreviewTextInput

    tb.Text.Remove(tb.SelectionStart, tb.SelectionLength) это видимо удаляем

    а потом вставляем 

    Insert(tb.CaretIndex, e.Text);

    а что такое var dN? В моём понимании var это как int, string, double т.е. переменная с типом который определён справа. А здесь запятая что ли стаёт переменной. Которую потом заменяем? Так? А точка это e.Text?


    • Изменено developers_s 14 марта 2012 г. 12:31
    14 марта 2012 г. 12:27
  • > WPF у меня [...] Тока цифры перестали вводиться с цифровой клавы.
           
     
    using System.Windows;
    using System.Windows.Input;
    
    namespace WpfApplication1
    {
        public partial class MainWindow : Window
        {
            public MainWindow()
            {
                InitializeComponent();
            }
    
            void tb_KeyDown(object sender, KeyEventArgs e)
            {
                if(e.Key == Key.OemPeriod)
                {
                    e.Handled = true;
                    tb.SelectedText = ",";
                    tb.SelectionLength = 0;
                    tb.SelectionStart += 1;
                }
            }
        }
    }
    
    <Window x:Class="WpfApplication1.MainWindow"
            xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
            xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
            Title="MainWindow" Height="350" Width="525" FontSize="16">
        <Grid>
            <TextBox x:Name="tb" KeyDown="tb_KeyDown" />
        </Grid>
    </Window>
      
      
    14 марта 2012 г. 12:53
  • Неа Malobukv не работает. Вообще не меняет.
    • Изменено developers_s 14 марта 2012 г. 13:22
    14 марта 2012 г. 13:22
  • Потому как цифры с цифровой клавиатуры перестали вводится может не надо было это событие заводить?

    Может быть вы NumLock случайно выключили? :)

    К сожалению, сейчас помочь в этом вопросе вам не смогу, нету дополнительной цифровой клавиатуры.


    Для связи [mail]

    14 марта 2012 г. 13:48
  • > не работает. Вообще не меняет.


    что именно не работает? у меня работает: точка заменяется запятой при нажатии на точку.
     
     

    14 марта 2012 г. 14:00
  • Ааааа теперь я понял. :) Видимо у меня раскладка стоит на аглицкой. Мне надо заменять запятую на точку :) Сейчас попробую поменять 

    if(e.Key == Key.OemPeriod)

    на

    if(e.Key == Key.Decimal)

    14 марта 2012 г. 14:18
  • Decimal не прокатил :(

    OemPeriod почему то тоже

    • Изменено developers_s 14 марта 2012 г. 14:45
    14 марта 2012 г. 14:40
  • > Decimal не прокатил :( OemPeriod почему то тоже


    подключите к TextBox следующий обработчик.
    что выводится при нажатии на точку?

    void tb_KeyDown(object sender, KeyEventArgs e)
    {
        MessageBox.Show(e.Key.ToString());
    }
       
     
    14 марта 2012 г. 14:54
  • Decimal

    У меня всё нормально когда раскладку меняю, но почему тему затеял, не хочу менять раскладку, хочу просто подменить запятую на точку.

    • Изменено developers_s 14 марта 2012 г. 15:57
    14 марта 2012 г. 15:56
  • Вам нужно делать замену знака и выставлять e.Handled = true только в том случае, если человек вводит нужный символ. В противном случае - просто ничего не делать и тогда ввод будет каким нужно. var dN - это просто переменная, при желании можете сразу её присваивать в текст textBox-у.

    PreviewTextInput += (o,e)=> { ... }; - это подписка на событие через лямбда выражение.

    15 марта 2012 г. 5:44
    Отвечающий