Форум программистов, компьютерный форум, киберфорум
C# Windows Forms
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 5.00/8: Рейтинг темы: голосов - 8, средняя оценка - 5.00
 Аватар для dizzo
0 / 0 / 0
Регистрация: 13.12.2012
Сообщений: 7

Переделать задание, Math функции

18.03.2013, 16:21. Показов 1705. Ответов 8
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Вот сама программа:
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
 
namespace Math_in_Winforms
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }
 
        private void button1_Click(object sender, EventArgs e)
        {
            double x, a, b, t1, t2;
            x = Convert.ToDouble(textBox1.Text);
            a = Convert.ToDouble(textBox2.Text);
            b = Convert.ToDouble(textBox3.Text);
            t1 = (1 / Math.Pow(a, 4) * Math.Pow(x, 3) / 3 - 3 * b * x + 3 * Math.Pow(b, 2) * Math.Log(x) + Math.Pow(b, 3) / x);
            textBox4.Text = t1.ToString();
            t2 = (1 / 1 - Math.Sin(a * x) + 1 / a * Math.Tan(a * x / 2));
            textBox5.Text = t2.ToString();
        }
 
        private void textBox1_KeyPress(object sender, KeyPressEventArgs e)
        {
            if (!(Char.IsDigit(e.KeyChar)) && !((e.KeyChar == '.') && (textBox1.Text.IndexOf(".") == -1) && (textBox1.Text.Length != 0)))
            {
                if (e.KeyChar != (char)Keys.Back)
                {
                    e.Handled = true;
                }
            }
        }
 
        private void textBox2_KeyPress(object sender, KeyPressEventArgs e)
        {
            if (!(Char.IsDigit(e.KeyChar)) && !((e.KeyChar == '.') && (textBox1.Text.IndexOf(".") == -1) && (textBox1.Text.Length != 0)))
            {
                if (e.KeyChar != (char)Keys.Back)
                {
                    e.Handled = true;
                }
            }
        }
 
        private void textBox3_KeyPress(object sender, KeyPressEventArgs e)
        {
            if (!(Char.IsDigit(e.KeyChar)) && !((e.KeyChar == '.') && (textBox1.Text.IndexOf(".") == -1) && (textBox1.Text.Length != 0)))
            {
                if (e.KeyChar != (char)Keys.Back)
                {
                    e.Handled = true;
                }
            }
        }
 
        private void button2_Click(object sender, EventArgs e)
        {
            Application.Exit();
        }
    }
}
Задание: Во всех событиях KeyPress, сделать так чтобы в текстбоксах можно было вводить запятую и отрицательные числа только один раз и чтобы знак минус можно было ставить только вначале, ну первым символом. Я только понял как сделать чтобы вводились знаки и запятые с точками, а вот нужно сделать так чтобы вводились только отрицательные числа и запятые, один раз и при этом чтобы не возможно было вводить текст. Заранее благодарю.

Добавлено через 28 минут
А да, и можно еще пояснения к внесенным изменениям. Благодарю!
0
Лучшие ответы (1)
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
18.03.2013, 16:21
Ответы с готовыми решениями:

Заменить Math.Min, Math.Max операторами if-else
Доброго времени. Как можно условия формул (Math.Min,Math.Max) заменить операторами if. Как в итоге код будет выглядеть. namespace New ...

Математические функции Math
Как за кодить arcsin, arccos, arctg, arcctg?

Как использовать функции System.Math без указания библиотеки
Необходимо писать большие формулы, включающие синусы и косинусы. Написал-забыл не прокатит, код выполняется динамически, так как нужен ввод...

8
Эксперт .NET
 Аватар для Casper-SC
4434 / 2094 / 404
Регистрация: 27.03.2010
Сообщений: 5,657
Записей в блоге: 1
18.03.2013, 19:20
Для всех текстбоксов можно (даже нужно) сделать один обработчик.
Цитата Сообщение от dizzo Посмотреть сообщение
чтобы в текстбоксах можно было вводить запятую и отрицательные числа только один раз
Как понять? Типа ввёл не ту цифру и всё, пути назад нет? Только перезапуск программы?

Добавлено через 49 секунд
В общем видимо тут тоже что и про знак минуса. Одна запятая и минус в начале. Понятно.
1
 Аватар для dizzo
0 / 0 / 0
Регистрация: 13.12.2012
Сообщений: 7
18.03.2013, 19:22  [ТС]
Casper-SC, ну вот я переделывал у меня получилось сделать так чтобы вводились минусы и запятые, но их можно было в одном текстбоксе вводить множество раз, а мне нужно сделать так чтобы они ввелись один раз и все)
0
)))
 Аватар для aleks_pilipenko
610 / 423 / 55
Регистрация: 31.12.2009
Сообщений: 2,334
Записей в блоге: 3
18.03.2013, 19:46
Сделай массив, в котором будут ненужные символы, если знак минус раз ввел, то добавляй в этот массив ещё и минус или запятую, а проверку сделай в булевом методе, типа:
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
        private void textBox1_KeyPress(object sender, KeyPressEventArgs e)
        {
            if(That(e.KeyChar))
            {
                if (e.KeyChar != (char)Keys.Back)
                {
                    e.Handled = true;
                }
            }
        }
        char[] massSimvol={'-',','};
        private bool That(char p)
        {
            for (int i = 0; i < massSimvol.Length; i++)
                if (massSimvol[i] == p) return true;
            return false;
        }
Я общую схему показал, дальше сам..
1
Эксперт .NET
 Аватар для Casper-SC
4434 / 2094 / 404
Регистрация: 27.03.2010
Сообщений: 5,657
Записей в блоге: 1
18.03.2013, 20:25
Лучший ответ Сообщение было отмечено как решение

Решение

Вот самый нормальный вариант, что у меня получился, тут до него ещё 2 недоработанных было:
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
using System;
using System.Linq;
using System.Windows.Forms;
 
namespace WindowsFormsApplication1
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
            textBox1.KeyPress += TextBoxes_KeyPress;
            textBox2.KeyPress += TextBoxes_KeyPress;
            textBox3.KeyPress += TextBoxes_KeyPress;
            //textBox4.KeyPress += TextBoxes_KeyPress;
            //textBox5.KeyPress += TextBoxes_KeyPress;
            textBox1.TextChanged += TextBoxes_TextChanged;
            textBox2.TextChanged += TextBoxes_TextChanged;
            textBox3.TextChanged += TextBoxes_TextChanged;
            //textBox4.TextChanged += TextBoxes_TextChanged;
            //textBox5.TextChanged += TextBoxes_TextChanged;
        }
 
        void TextBoxes_TextChanged(object sender, EventArgs e)
        {
            TextBox tBox = (TextBox)sender;
            int index;
            if ((index = tBox.Text.IndexOf('-')) != -1 & (index > 0 & index != 0))
            {
                tBox.Text = '-' + tBox.Text.Replace("-", string.Empty);
                tBox.SelectionStart = tBox.Text.Length;
            }
            if (tBox.Text.IndexOf('.') == 0)
            {
                tBox.Text = '0' + tBox.Text;
                tBox.SelectionStart = tBox.Text.Length;
            }
        }
 
        private void TextBoxes_KeyPress(object sender, KeyPressEventArgs e)
        {
            TextBox tBox = (TextBox)sender;
 
            //Если введены цифра, бэкспэйс, точка или минус, то переход к следующему условию ниже
            if ((!char.IsDigit(e.KeyChar) && e.KeyChar != (char)Keys.Back && e.KeyChar != '.' && e.KeyChar != '-') ||
                //Если ввели один из вариантов выше, то идёт проверка в этом условии
                (e.KeyChar == '.' && tBox.Text.Contains('.') || e.KeyChar == '-' && tBox.Text.Contains('-')))
            {
                e.Handled = true;
            }
        }
    }
}
Добавлено через 3 минуты
Всё сделал рабочий вариант, пост обновлен.

Добавлено через 46 секунд
Меня аж самого радует, как оно работает , просто не 5 минут сидел ломал голову.
Вложения
Тип файла: rar WinForms_ValidateText.rar (48.8 Кб, 6 просмотров)
3
 Аватар для ViterAlex
8951 / 4863 / 1886
Регистрация: 11.02.2013
Сообщений: 10,246
18.03.2013, 21:26
Событие KeyDown. Пока не работает, если вводится запятая в русской раскладке. В английской раскладке всё работает. Думаю над универсальностью
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
        private void textBox1_KeyDown(object sender, KeyEventArgs e)
        {
            TextBox tb = (TextBox)sender;
            //Цифры верхнего ряда клавиатуры
            bool upperDigits = (e.KeyCode >= Keys.D0 && e.KeyCode <= Keys.D9) && e.Modifiers != Keys.Shift;
            //Цифры цифрового блока
            bool numPadDigits = e.KeyCode >= Keys.NumPad0 && e.KeyCode <= Keys.NumPad9;
            //Запятая
            bool comma = e.KeyCode == Keys.Oemcomma && tb.Text.IndexOf(',') == -1;
            //Знак минус
            bool minus = (e.KeyCode == Keys.OemMinus || e.KeyCode == Keys.Subtract) &&
                (tb.SelectionStart == 0 && tb.Text.IndexOf('-') == -1);
            //Клавиши перемещения
            bool moveKey = false;
            switch (e.KeyCode)
            {
                case Keys.Delete:
                case Keys.Back:
                case Keys.Left:
                case Keys.Right:
                case Keys.Home:
                case Keys.End:
                    moveKey = true;
                    return;
                default:
                    break;
            }
            e.SuppressKeyPress = !(upperDigits | numPadDigits | comma | minus | moveKey);
            Debug.Print("{0}{1}\n{2}{3}\n{4}{5}\n{6}{7}\n{8}{9}",
                "upperDigits = ", upperDigits.ToString(),
                "numPadDigits = ", numPadDigits.ToString(),
                "comma = ", comma.ToString(),
                "minus = ", minus.ToString(),
                "moveKey = ", moveKey.ToString());
        }
1
 Аватар для dizzo
0 / 0 / 0
Регистрация: 13.12.2012
Сообщений: 7
18.03.2013, 21:55  [ТС]
ViterAlex,
Casper-SC, Благодарю вас! Огромное спасибо!
0
Эксперт .NET
 Аватар для Casper-SC
4434 / 2094 / 404
Регистрация: 27.03.2010
Сообщений: 5,657
Записей в блоге: 1
18.03.2013, 22:22
Кстати, я там одно условие вообще тупо сделал, просто по невнимательности, метод-обработчик лучше изменить так:
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
        private void TextBoxes_TextChanged(object sender, EventArgs e)
        {
            TextBox tBox = (TextBox)sender;
            if ((tBox.Text.IndexOf('-')) > 0)
            {
                tBox.Text = '-' + tBox.Text.Replace("-", string.Empty);
                tBox.SelectionStart = tBox.Text.Length;
            }
            if (tBox.Text.IndexOf('.') == 0)
            {
                tBox.Text = '0' + tBox.Text;
                tBox.SelectionStart = tBox.Text.Length;
            }
        }
Ещё можно придумать, как при при нажатии точки строка такого типа: "0000." заменялась бы на: "0."
0
 Аватар для ViterAlex
8951 / 4863 / 1886
Регистрация: 11.02.2013
Сообщений: 10,246
18.03.2013, 22:41
Вариант для любого языка (кажется). Пришлось запятую отслеживать в KeyPress, потому что только это событие даёт символ, который выводится непосредственно на экран с учётом раскладки, локали и т.п. Точка или запятая могут быть введены только один раз. Минус — только в начале строки и только один раз
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
        private bool notNumber;
        private void textBox1_KeyDown(object sender, KeyEventArgs e)
        {
            notNumber = false;
            TextBox tb = (TextBox)sender;
            //Цифры верхнего ряда клавиатуры
            bool upperDigits = (e.KeyCode >= Keys.D0 && e.KeyCode <= Keys.D9) && e.Modifiers != Keys.Shift;
            //Цифры цифрового блока
            bool numPadDigits = e.KeyCode >= Keys.NumPad0 && e.KeyCode <= Keys.NumPad9;
            //Знак минус
            bool minus = (e.KeyCode == Keys.OemMinus || e.KeyCode == Keys.Subtract) &&
                (tb.SelectionStart == 0 && tb.Text.IndexOf('-') == -1);
            //Клавиши перемещения
            bool moveKey = false;
            switch (e.KeyCode)
            {
                case Keys.Delete:
                case Keys.Back:
                case Keys.Left:
                case Keys.Right:
                case Keys.Home:
                case Keys.End:
                    moveKey = true;
                    return;
                default:
                    break;
            }
            notNumber = !(upperDigits | numPadDigits  | minus | moveKey);//| comma
            //Debug.Print("{0}{1}\n{2}{3}\n{4}{5}\n{6}{7}\n{8}{9}",
            //    "upperDigits = ", upperDigits.ToString(),
            //    "numPadDigits = ", numPadDigits.ToString(),
            //    "comma = ", comma.ToString(),
            //    "minus = ", minus.ToString(),
            //    "moveKey = ", moveKey.ToString());
        }
 
        private void textBox1_KeyPress(object sender, KeyPressEventArgs e)
        {
 
            //Запятая или точка
            bool comma = (e.KeyChar == ',' | e.KeyChar == '.') && 
                ((TextBox)sender).Text.IndexOfAny(new char[] { ',', '.' }) == -1;
            e.Handled = notNumber ? !comma : notNumber;
            //Debug.Print("{0}{1}\t{2}{3}\t{4}{5}\t{6}{7}",
            //    "comma = ", comma.ToString(),
            //    "notNumber = ", notNumber.ToString(),
            //    "e.Handled = ", e.Handled.ToString(),
            //    "e.KeyChar = ", e.KeyChar.ToString());
        }
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
18.03.2013, 22:41
Помогаю со студенческими работами здесь

Не работают функции <math.h> в методе (функции-члене)
Сделал программу которая решает по формуле задачу. Все работает, но стоило вынести нахождение y в функцию, как компилятор стал писать...

Почему Math.round(Math.random() * (max - min) дает неравномерное распределение?
Если min - 0, а max - целое. Рекомендуют Math.floor(Math.random() * (max - min + 1)) вместо Math.round(Math.random() * (max - min)) для...

math или не math?! вот в чем вопрос...
Доброго времени суток! Пипл подскажите у вас в VS в math.h есть такие функции, как: round trunc tgamma floor ceil ??? ...

math.h тригонометрические функции
Приветствую. Ребят, такой вопрос возник..работал, работал..потом решил проверить..и смотрю, что sin() выводит какие-то бредовые значения,...

Математические функции math.h
Не работают стандартные функции библиотеки &lt;math.h&gt; Ну, например: #include &lt;cmath&gt; #include &lt;iostream&gt; using namespace...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
9
Ответ Создать тему
Новые блоги и статьи
Загрузка PNG-файла с альфа-каналом с помощью библиотеки SDL3_image на Android
8Observer8 27.01.2026
Содержание блога SDL3_image - это библиотека для загрузки и работы с изображениями. Эта пошаговая инструкция покажет, как загрузить и вывести на экран смартфона картинку с альфа-каналом, то есть с. . .
влияние грибов на сукцессию
anaschu 26.01.2026
Бифуркационные изменения массы гриба происходят тогда, когда мы уменьшаем массу компоста в 10 раз, а скорость прироста биомассы уменьшаем в три раза. Скорость прироста биомассы может уменьшаться за. . .
Воспроизведение звукового файла с помощью SDL3_mixer при касании экрана Android
8Observer8 26.01.2026
Содержание блога SDL3_mixer - это библиотека я для воспроизведения аудио. В отличие от инструкции по добавлению текста код по проигрыванию звука уже содержится в шаблоне примера. Нужно только. . .
Установка Android SDK, NDK, JDK, CMake и т.д.
8Observer8 25.01.2026
Содержание блога Перейдите по ссылке: https:/ / developer. android. com/ studio и в самом низу страницы кликните по архиву "commandlinetools-win-xxxxxx_latest. zip" Извлеките архив и вы увидите. . .
Вывод текста со шрифтом TTF на Android с помощью библиотеки SDL3_ttf
8Observer8 25.01.2026
Содержание блога Если у вас не установлены Android SDK, NDK, JDK, и т. д. то сделайте это по следующей инструкции: Установка Android SDK, NDK, JDK, CMake и т. д. Сборка примера Скачайте. . .
Использование SDL3-callbacks вместо функции main() на Android, Desktop и WebAssembly
8Observer8 24.01.2026
Содержание блога Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
моя боль
iceja 24.01.2026
Выложила интерполяцию кубическими сплайнами www. iceja. net REST сервисы временно не работают, только через Web. Написала за 56 рабочих часов этот сайт с нуля. При помощи perplexity. ai PRO , при. . .
Модель сукцессии микоризы
anaschu 24.01.2026
Решили писать научную статью с неким РОманом
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru