Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > .NET Frameworks (точка нет фреймворки) > C# (си шарп)
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 10.08.2016, 15:21   #1
Korolyovanton
Пользователь
 
Регистрация: 26.04.2016
Сообщений: 21
По умолчанию Убрать "8" в MaskedTextBox

Всем привет!

На форме есть MaskedTextBox с маской ввода вида: (000) 000-00-00

Скажите пожалуйста, как сделать так, чтобы когда пользователь ВСТАВЛЯЛ номер телефона с 8 спереди, эта восьмерка либо автоматически удалялась, либо возникало предупреждающее окно?

Заранее спасибо.
Korolyovanton вне форума Ответить с цитированием
Старый 10.08.2016, 17:23   #2
pu4koff
Старожил
 
Аватар для pu4koff
 
Регистрация: 22.05.2007
Сообщений: 9,065
По умолчанию

Делать свой бокс с блэк дкеком и...:
Код:
public class MyMaskedTextBox: MaskedTextBox
    {
        protected override void WndProc(ref Message m)
        {
            if (m.Msg == 0x0302)
            {
                var s = System.Windows.Forms.Clipboard.GetText();
                if (s[0] == '8')
                {
                    System.Windows.Forms.Clipboard.SetText(s.Remove(0, 1));
                }

            }

            base.WndProc(ref m);
        }
    }
Соответственно на форму нужно класть своего наследника. Правда оно из буфера обмена восьмёрку убивает, есть куда расти и что менять к лучшему
pu4koff вне форума Ответить с цитированием
Старый 10.08.2016, 17:46   #3
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

Цитата:
Правда оно из буфера обмена восьмёрку убивает
проблема не в этом, а в том, что автор топика некорректно сформулировал ТЗ.
нужно убирать не первую восьмёрку, а первую восьмёрку, если всего 11 (одиннадцать) цифр в номер.
потому как номер 8-928-177-02-34 с точки зрения автора не валидный.
но проблема в том, что есть операторы, у которых код начинается с "8* (810, 818 и т.д.)
Serge_Bliznykov вне форума Ответить с цитированием
Старый 10.08.2016, 18:30   #4
pu4koff
Старожил
 
Аватар для pu4koff
 
Регистрация: 22.05.2007
Сообщений: 9,065
По умолчанию

Цитата:
Сообщение от Serge_Bliznykov Посмотреть сообщение
проблема не в этом, а в том, что автор топика некорректно сформулировал ТЗ.
нужно убирать не первую восьмёрку, а первую восьмёрку, если всего 11 (одиннадцать) цифр в номер.
потому как номер 8-928-177-02-34 с точки зрения автора не валидный.
но проблема в том, что есть операторы, у которых код начинается с "8* (810, 818 и т.д.)
По-хорошему, вообще сейчас так не модно делать. Нужно писать валидацию нормальную, а пользователь пусть чего хочет вводит. Хочет с 8, хочет с +7, хочет в формате 8-123-123-11-11, хочет - 8(495)123-11-11, а может и как на сайтиках и в рекламках любят группировать красивости: +7-12-3333-1111. Люди сейчас обидчивые пошли, не любят, когда компьютер втихаря какие-то символы у них трёт или запрещает что-то вводить (типа чего эта железка себе позволяет). Нужно разрешать вводить бред, а потом тыкать носом красными штуками, чтобы даже дошкольник понял куда и что он не так ввёл.
Меня самого напрягает когда приходится где-то угадывать какой формат телефонного номера разработчик считает корректным. Хорошо, если хотя бы напишут подсказку: "телефон нужно вводить в 10-значном формате без пробелом и тире".
pu4koff вне форума Ответить с цитированием
Старый 10.08.2016, 19:04   #5
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

pu4koff, вот, согласен. готов подписаться под каждым словом!
Serge_Bliznykov вне форума Ответить с цитированием
Старый 11.08.2016, 14:27   #6
Korolyovanton
Пользователь
 
Регистрация: 26.04.2016
Сообщений: 21
По умолчанию

Цитата:
Сообщение от pu4koff Посмотреть сообщение
По-хорошему, вообще сейчас так не модно делать. Нужно писать валидацию нормальную, а пользователь пусть чего хочет вводит. Хочет с 8, хочет с +7, хочет в формате 8-123-123-11-11, хочет - 8(495)123-11-11, а может и как на сайтиках и в рекламках любят группировать красивости: +7-12-3333-1111. Люди сейчас обидчивые пошли, не любят, когда компьютер втихаря какие-то символы у них трёт или запрещает что-то вводить (типа чего эта железка себе позволяет). Нужно разрешать вводить бред, а потом тыкать носом красными штуками, чтобы даже дошкольник понял куда и что он не так ввёл.
Меня самого напрягает когда приходится где-то угадывать какой формат телефонного номера разработчик считает корректным. Хорошо, если хотя бы напишут подсказку: "телефон нужно вводить в 10-значном формате без пробелом и тире".
Да, я не совсем корректно мысль сформулировал. Мне нужно, чтобы убиралась 8 только в том, случае, если в номере телефона только 11 цифр.
Нужно все это для потому, что в дальнейшем на введенный номер отправится смс. Соответственно, если номер введен неверно - смс отправится на неверный номер.
Korolyovanton вне форума Ответить с цитированием
Старый 11.08.2016, 14:50   #7
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

Цитата:
Нужно все это для потому, что в дальнейшем на введенный номер отправится смс. Соответственно, если номер введен неверно - смс отправится на неверный номер.
так об этом выше и сказано - позволяйте вводить цифры в любом виде.
Но при попытке просабмиттить (отправить значения) - ругайтесь и не позволяйте.
Serge_Bliznykov вне форума Ответить с цитированием
Старый 11.08.2016, 15:26   #8
pu4koff
Старожил
 
Аватар для pu4koff
 
Регистрация: 22.05.2007
Сообщений: 9,065
По умолчанию

Цитата:
Сообщение от Korolyovanton Посмотреть сообщение
Да, я не совсем корректно мысль сформулировал. Мне нужно, чтобы убиралась 8 только в том, случае, если в номере телефона только 11 цифр.
Нужно все это для потому, что в дальнейшем на введенный номер отправится смс. Соответственно, если номер введен неверно - смс отправится на неверный номер.
Ну, перепишите как-то так:
Код:
protected override void WndProc(ref Message m)
        {
            if (m.Msg == 0x0302)
            {
                var s = System.Windows.Forms.Clipboard.GetText();

                foreach (var c in s)
                    if (!Char.IsNumber(c))
                    {
                        MessageBox.Show("Человек, в буфере какие-то буквы, а не номер телефона");
                        return;
                    }

                if (s.Length == 11 && s[0] == '8')
                {
                    System.Windows.Forms.Clipboard.SetText(s.Remove(0, 1));
                }
            }

            base.WndProc(ref m);
        }
Точно проявится баг, когда соберётесь вставить номер телефона с восьмёркой в середину поля ввода. Нужно уже смотреть на текущую позицию в поле. Потом всплывёт еще какой-нибудь нюанс или пользователи будут тупить чего у них с буфером происходит, чего ничего не вставляется,... Потом захочется экономить на смс и на билайн слать с билайновской симки или API сервиса, который с билайном дешевле работает, нужно будет добавить проверку оператора. Или просто захочется отсеивать заведомо не существующие номера 8-003-123-11-12. Может чёрный список какой добавится или еще чего. В итоге фигня с этими всеми проверками и масками будет (дублирования кода, лишние места для ошибок,...).
pu4koff вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Нужно пояснить/прокомментировать код программы, или коды функций "Добавить" "Удалить" "Обновить(редактировать" "Поиск" "Период") ZIRASS PHP 4 15.06.2016 14:23
Для заданной строки определить все входящие в неё символ. Например: строка "abccbbabbac" состоит из символов "a", "b" и "c" Sandakan01 Помощь студентам 1 24.02.2016 03:20
Создаю диаграмму "Bar". Подскажите как убрать растояние между "столбами" MAcK Компоненты Delphi 11 24.10.2007 10:49