Преобразование строки к числу
Цитата: Вася от 16.11.2021, 21:57Цитата: Тимур от 16.11.2021, 21:03Хотелось бы скинуть вам код, чтобы вы могли отрефакторить его возможно, а может что то подсказать. Могу ли я это сделать?
Можете конечно, правда сам довольно таки "грязно" пишу код.
Цитата: Тимур от 16.11.2021, 21:25Как мне установить кнопку в конструкторе так, чтобы она не прикреплялась к панели
Вот так (7:30).
Цитата: Тимур от 16.11.2021, 21:03Хотелось бы скинуть вам код, чтобы вы могли отрефакторить его возможно, а может что то подсказать. Могу ли я это сделать?
Можете конечно, правда сам довольно таки "грязно" пишу код.
Цитата: Тимур от 16.11.2021, 21:25Как мне установить кнопку в конструкторе так, чтобы она не прикреплялась к панели
Вот так (7:30).
Цитата: Тимур от 16.11.2021, 22:13[spoiler title="Код"]
using System; using System.Data; using System.Drawing; using System.Linq; using System.Windows.Forms; namespace Калькулятор { public partial class Form1 : Form { public Form1() { InitializeComponent(); button20.Location = new Point(205, 45); label1.Location = new Point(270, 7); foreach (Button buttones in panel2.Controls.OfType<Button>()) { buttones.Click += (s, a) => { count++; label1.Text += $"{buttones.Text}"; label1.Location = new Point(label1.Location.X - 10, label1.Location.Y); }; } foreach (Button buttonnn in panel3.Controls.OfType<Button>()) { buttonnn.Click += (s, a) => { if (count >= 1) { label1.Text += $"{buttonnn.Text}"; label1.Location = new Point(label1.Location.X - 10, label1.Location.Y); count2++; } if (count2 >= 1) { count = 0; } }; } button18.Click += (s, e) => { label1.Text += $"{button18.Text}"; label1.Location = new Point(label1.Location.X - 10, label1.Location.Y); count++; }; button19.Click += (s, e) => { count++; }; button17.Click += (s, a) => { label1.Text = null; label1.Location = new Point(270, 7); }; button15.Click += (s, a) => { label1.Text += button15.Text; }; } private void button14_Click(object sender, EventArgs e) { count++; label1.Text += $"{button14.Text}"; label1.Location = new Point(label1.Location.X - 10, label1.Location.Y); } public int count = 0; public int count2 = 0; public string line = ""; public int length = 0; private void button20_Click(object sender, EventArgs e) { double value = double.Parse(label1.Text); value /= 100; label1.Text = value.ToString(); length = label1.Text.Length; label1.Location = new Point(270 - (length * 10), label1.Location.Y); } private void button2_Click(object sender, EventArgs e) { string str = label1.Text; double res = Convert.ToDouble(new DataTable().Compute(str, null)); label1.Text = res.ToString(); length = res.ToString().Length; label1.Location = new Point(270 - (length * 10), label1.Location.Y); } } }[/spoiler]
Вот код. Кстати про ctrl + alt + t я знал. Но при переносе к форме, кнопка улетает на 0;0 и если её на то же место перетащить, то опять прикрепление к панели. Я обошел это первой строчкой кода. Конечно неприятно писать на такую фигню код, но пока что не понял как до конца пользоваться ctrl alt t.
using System;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Windows.Forms;
namespace Калькулятор
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
button20.Location = new Point(205, 45);
label1.Location = new Point(270, 7);
foreach (Button buttones in panel2.Controls.OfType<Button>())
{
buttones.Click += (s, a) =>
{
count++;
label1.Text += $"{buttones.Text}";
label1.Location = new Point(label1.Location.X - 10, label1.Location.Y);
};
}
foreach (Button buttonnn in panel3.Controls.OfType<Button>())
{
buttonnn.Click += (s, a) =>
{
if (count >= 1)
{
label1.Text += $"{buttonnn.Text}";
label1.Location = new Point(label1.Location.X - 10, label1.Location.Y);
count2++;
}
if (count2 >= 1)
{
count = 0;
}
};
}
button18.Click += (s, e) =>
{
label1.Text += $"{button18.Text}";
label1.Location = new Point(label1.Location.X - 10, label1.Location.Y);
count++;
};
button19.Click += (s, e) =>
{
count++;
};
button17.Click += (s, a) =>
{
label1.Text = null;
label1.Location = new Point(270, 7);
};
button15.Click += (s, a) =>
{
label1.Text += button15.Text;
};
}
private void button14_Click(object sender, EventArgs e)
{
count++;
label1.Text += $"{button14.Text}";
label1.Location = new Point(label1.Location.X - 10, label1.Location.Y);
}
public int count = 0;
public int count2 = 0;
public string line = "";
public int length = 0;
private void button20_Click(object sender, EventArgs e)
{
double value = double.Parse(label1.Text);
value /= 100;
label1.Text = value.ToString();
length = label1.Text.Length;
label1.Location = new Point(270 - (length * 10), label1.Location.Y);
}
private void button2_Click(object sender, EventArgs e)
{
string str = label1.Text;
double res = Convert.ToDouble(new DataTable().Compute(str, null));
label1.Text = res.ToString();
length = res.ToString().Length;
label1.Location = new Point(270 - (length * 10), label1.Location.Y);
}
}
}
Вот код. Кстати про ctrl + alt + t я знал. Но при переносе к форме, кнопка улетает на 0;0 и если её на то же место перетащить, то опять прикрепление к панели. Я обошел это первой строчкой кода. Конечно неприятно писать на такую фигню код, но пока что не понял как до конца пользоваться ctrl alt t.
Цитата: Вася от 16.11.2021, 22:50Можете проект архивом кинуть?
Можете проект архивом кинуть?
Цитата: Тимур от 16.11.2021, 22:54Могу через zip файл, но как мне его прикрепить?
Могу через zip файл, но как мне его прикрепить?
Цитата: Тимур от 17.11.2021, 14:47Вот ссылка
Не уверен что именно то, что надо скинул.
Кстати уже нашёл баг, в готовом exe. Если делить допустим 5/3 а потом полученное выражение / 3, то возникает ошибка. Через отладку даже не могу понять в чём дело.
Вот ссылка
Не уверен что именно то, что надо скинул.
Кстати уже нашёл баг, в готовом exe. Если делить допустим 5/3 а потом полученное выражение / 3, то возникает ошибка. Через отладку даже не могу понять в чём дело.
Цитата: Тимур от 17.11.2021, 23:09Цитата: Вася от 16.11.2021, 23:10На какой-нибудь файлообменник, типа upload.ee, залейте и киньте сюда ссылку.
Цитата: Тимур от 17.11.2021, 14:47Вот ссылка
Не уверен что именно то, что надо скинул.
Кстати уже нашёл баг, в готовом exe. Если делить допустим 5/3 а потом полученное выражение / 3, то возникает ошибка. Через отладку даже не могу понять в чём дело.
Не могу найти ошибку в дебаге, т.к не знаю как работает метод Compute();
Цитата: Вася от 16.11.2021, 23:10На какой-нибудь файлообменник, типа upload.ee, залейте и киньте сюда ссылку.
Цитата: Тимур от 17.11.2021, 14:47Вот ссылка
Не уверен что именно то, что надо скинул.
Кстати уже нашёл баг, в готовом exe. Если делить допустим 5/3 а потом полученное выражение / 3, то возникает ошибка. Через отладку даже не могу понять в чём дело.
Не могу найти ошибку в дебаге, т.к не знаю как работает метод Compute();
Цитата: Вася от 17.11.2021, 23:53Цитата: Тимур от 17.11.2021, 14:47Если делить допустим 5/3 а потом полученное выражение / 3, то возникает ошибка. Через отладку даже не могу понять в чём дело.
Дело в региональных настройках. Для дробных чисел на русской винде используется запятая для конвертации числа в строку и наоборот. Метод Compute почему-то игнорирует эти настройки и ждёт точку. Можно заменить запятую на точку (str.Replace(",", ".")) или переопределить региональные настройки, добавив в методы конвертации дополнительный параметр (res.ToString(numberFormatInfo); double.Parse(label1.Text, numberFormatInfo);).
Я так понял, что Вы перемещаете label1 для того, чтобы текст находился справа. Это можно сделать проще, указав в конструкторе формы для label1 свойству TextAlign значение TopRight.
Немного изменил проект.
Цитата: Тимур от 17.11.2021, 14:47Если делить допустим 5/3 а потом полученное выражение / 3, то возникает ошибка. Через отладку даже не могу понять в чём дело.
Дело в региональных настройках. Для дробных чисел на русской винде используется запятая для конвертации числа в строку и наоборот. Метод Compute почему-то игнорирует эти настройки и ждёт точку. Можно заменить запятую на точку (str.Replace(",", ".")) или переопределить региональные настройки, добавив в методы конвертации дополнительный параметр (res.ToString(numberFormatInfo); double.Parse(label1.Text, numberFormatInfo);).
Я так понял, что Вы перемещаете label1 для того, чтобы текст находился справа. Это можно сделать проще, указав в конструкторе формы для label1 свойству TextAlign значение TopRight.
Немного изменил проект.
Цитата: Тимур от 18.11.2021, 00:03Цитата: Вася от 17.11.2021, 23:53Цитата: Тимур от 17.11.2021, 14:47Если делить допустим 5/3 а потом полученное выражение / 3, то возникает ошибка. Через отладку даже не могу понять в чём дело.
Дело в региональных настройках. Для дробных чисел на русской винде используется запятая для конвертации числа в строку и наоборот. Метод Compute почему-то игнорирует эти настройки и ждёт точку. Можно заменить запятую на точку (str.Replace(",", ".")) или переопределить региональные настройки, добавив в методы конвертации дополнительный параметр (res.ToString(numberFormatInfo); double.Parse(label1.Text, numberFormatInfo);).
Я так понял, что Вы перемещаете label1 для того, чтобы текст находился справа. Это можно сделать проще, указав в конструкторе формы для label1 свойству TextAlign значение TopRight.
Немного изменил проект.
Огромное спасибо, что помогли мне со всем)
Цитата: Вася от 17.11.2021, 23:53Цитата: Тимур от 17.11.2021, 14:47Если делить допустим 5/3 а потом полученное выражение / 3, то возникает ошибка. Через отладку даже не могу понять в чём дело.
Дело в региональных настройках. Для дробных чисел на русской винде используется запятая для конвертации числа в строку и наоборот. Метод Compute почему-то игнорирует эти настройки и ждёт точку. Можно заменить запятую на точку (str.Replace(",", ".")) или переопределить региональные настройки, добавив в методы конвертации дополнительный параметр (res.ToString(numberFormatInfo); double.Parse(label1.Text, numberFormatInfo);).
Я так понял, что Вы перемещаете label1 для того, чтобы текст находился справа. Это можно сделать проще, указав в конструкторе формы для label1 свойству TextAlign значение TopRight.
Немного изменил проект.
Огромное спасибо, что помогли мне со всем)
Цитата: Тимур от 18.11.2021, 00:23Кстати у меня, почему - то sln файл не открывается. Один или несколько проектов были неправильно загружены. Не понимаю.
Кстати у меня, почему - то sln файл не открывается. Один или несколько проектов были неправильно загружены. Не понимаю.
Цитата: Вася от 18.11.2021, 00:34Странно, у меня открывает. Тогда просто поменяйте в конструкторе формы TextAlign для label1 и замените код в Form1.cs на
[spoiler title="Код"]using System; using System.Data; using System.Drawing; using System.Linq; using System.Windows.Forms; using System.Globalization; namespace Калькулятор { public partial class Form1 : Form { public Form1() { InitializeComponent(); button20.Location = new Point(205, 45); //label1.Location = new Point(270, 7); foreach (Button buttones in panel2.Controls.OfType<Button>()) { buttones.Click += (s, a) => { count++; label1.Text += $"{buttones.Text}"; //label1.Location = new Point(label1.Location.X - 10, label1.Location.Y); }; } foreach (Button buttonnn in panel3.Controls.OfType<Button>()) { buttonnn.Click += (s, a) => { if (count >= 1) { label1.Text += $"{buttonnn.Text}"; //label1.Location = new Point(label1.Location.X - 10, label1.Location.Y); count2++; } if (count2 >= 1) { count = 0; } }; } button18.Click += (s, e) => { label1.Text += $"{button18.Text}"; //label1.Location = new Point(label1.Location.X - 10, label1.Location.Y); count++; }; button19.Click += (s, e) => { count++; }; button17.Click += (s, a) => { label1.Text = null; //label1.Location = new Point(270, 7); }; button15.Click += (s, a) => { label1.Text += button15.Text; }; } private void button14_Click(object sender, EventArgs e) { count++; label1.Text += $"{button14.Text}"; //label1.Location = new Point(label1.Location.X - 10, label1.Location.Y); } public int count = 0; public int count2 = 0; public string line = ""; public int length = 0; DataTable dataTable = new DataTable(); //Здесь лучше один раз создать объект и его использовать NumberFormatInfo numberFormatInfo = new NumberFormatInfo //региональные настройки { NumberDecimalSeparator = "." }; private void button20_Click(object sender, EventArgs e) { double value = double.Parse(label1.Text, numberFormatInfo); value /= 100; label1.Text = value.ToString(numberFormatInfo); //length = label1.Text.Length; //label1.Location = new Point(270 - (length * 10), label1.Location.Y); } private void button2_Click(object sender, EventArgs e) { if (label1.Text == "") { } else { string str = label1.Text; double res = Convert.ToDouble(dataTable.Compute(str, null)); label1.Text = res.ToString(numberFormatInfo); //length = res.ToString().Length; //label1.Location = new Point(270 - (length * 10), label1.Location.Y); } } } }[/spoiler]
Странно, у меня открывает. Тогда просто поменяйте в конструкторе формы TextAlign для label1 и замените код в Form1.cs на
using System;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Windows.Forms;
using System.Globalization;
namespace Калькулятор
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
button20.Location = new Point(205, 45);
//label1.Location = new Point(270, 7);
foreach (Button buttones in panel2.Controls.OfType<Button>())
{
buttones.Click += (s, a) =>
{
count++;
label1.Text += $"{buttones.Text}";
//label1.Location = new Point(label1.Location.X - 10, label1.Location.Y);
};
}
foreach (Button buttonnn in panel3.Controls.OfType<Button>())
{
buttonnn.Click += (s, a) =>
{
if (count >= 1)
{
label1.Text += $"{buttonnn.Text}";
//label1.Location = new Point(label1.Location.X - 10, label1.Location.Y);
count2++;
}
if (count2 >= 1)
{
count = 0;
}
};
}
button18.Click += (s, e) =>
{
label1.Text += $"{button18.Text}";
//label1.Location = new Point(label1.Location.X - 10, label1.Location.Y);
count++;
};
button19.Click += (s, e) =>
{
count++;
};
button17.Click += (s, a) =>
{
label1.Text = null;
//label1.Location = new Point(270, 7);
};
button15.Click += (s, a) =>
{
label1.Text += button15.Text;
};
}
private void button14_Click(object sender, EventArgs e)
{
count++;
label1.Text += $"{button14.Text}";
//label1.Location = new Point(label1.Location.X - 10, label1.Location.Y);
}
public int count = 0;
public int count2 = 0;
public string line = "";
public int length = 0;
DataTable dataTable = new DataTable(); //Здесь лучше один раз создать объект и его использовать
NumberFormatInfo numberFormatInfo = new NumberFormatInfo //региональные настройки
{
NumberDecimalSeparator = "."
};
private void button20_Click(object sender, EventArgs e)
{
double value = double.Parse(label1.Text, numberFormatInfo);
value /= 100;
label1.Text = value.ToString(numberFormatInfo);
//length = label1.Text.Length;
//label1.Location = new Point(270 - (length * 10), label1.Location.Y);
}
private void button2_Click(object sender, EventArgs e)
{
if (label1.Text == "")
{
}
else
{
string str = label1.Text;
double res = Convert.ToDouble(dataTable.Compute(str, null));
label1.Text = res.ToString(numberFormatInfo);
//length = res.ToString().Length;
//label1.Location = new Point(270 - (length * 10), label1.Location.Y);
}
}
}
}
Цитата: Тимур от 24.11.2021, 16:44Цитата: Вася от 18.11.2021, 00:34Странно, у меня открывает. Тогда просто поменяйте в конструкторе формы TextAlign для label1 и замените код в Form1.cs на
[spoiler title="Код"]using System;using System.Data;using System.Drawing;using System.Linq;using System.Windows.Forms;using System.Globalization;namespace Калькулятор{public partial class Form1 : Form{public Form1(){InitializeComponent();button20.Location = new Point(205, 45);//label1.Location = new Point(270, 7);foreach (Button buttones in panel2.Controls.OfType<Button>()){buttones.Click += (s, a) =>{count++;label1.Text += $"{buttones.Text}";//label1.Location = new Point(label1.Location.X - 10, label1.Location.Y);};}foreach (Button buttonnn in panel3.Controls.OfType<Button>()){buttonnn.Click += (s, a) =>{if (count >= 1){label1.Text += $"{buttonnn.Text}";//label1.Location = new Point(label1.Location.X - 10, label1.Location.Y);count2++;}if (count2 >= 1){count = 0;}};}button18.Click += (s, e) =>{label1.Text += $"{button18.Text}";//label1.Location = new Point(label1.Location.X - 10, label1.Location.Y);count++;};button19.Click += (s, e) =>{count++;};button17.Click += (s, a) =>{label1.Text = null;//label1.Location = new Point(270, 7);};button15.Click += (s, a) =>{label1.Text += button15.Text;};}private void button14_Click(object sender, EventArgs e){count++;label1.Text += $"{button14.Text}";//label1.Location = new Point(label1.Location.X - 10, label1.Location.Y);}public int count = 0;public int count2 = 0;public string line = "";public int length = 0;DataTable dataTable = new DataTable(); //Здесь лучше один раз создать объект и его использоватьNumberFormatInfo numberFormatInfo = new NumberFormatInfo //региональные настройки{NumberDecimalSeparator = "."};private void button20_Click(object sender, EventArgs e){double value = double.Parse(label1.Text, numberFormatInfo);value /= 100;label1.Text = value.ToString(numberFormatInfo);//length = label1.Text.Length;//label1.Location = new Point(270 - (length * 10), label1.Location.Y);}private void button2_Click(object sender, EventArgs e){if (label1.Text == ""){}else{string str = label1.Text;double res = Convert.ToDouble(dataTable.Compute(str, null));label1.Text = res.ToString(numberFormatInfo);//length = res.ToString().Length;//label1.Location = new Point(270 - (length * 10), label1.Location.Y);}}}}using System; using System.Data; using System.Drawing; using System.Linq; using System.Windows.Forms; using System.Globalization; namespace Калькулятор { public partial class Form1 : Form { public Form1() { InitializeComponent(); button20.Location = new Point(205, 45); //label1.Location = new Point(270, 7); foreach (Button buttones in panel2.Controls.OfType<Button>()) { buttones.Click += (s, a) => { count++; label1.Text += $"{buttones.Text}"; //label1.Location = new Point(label1.Location.X - 10, label1.Location.Y); }; } foreach (Button buttonnn in panel3.Controls.OfType<Button>()) { buttonnn.Click += (s, a) => { if (count >= 1) { label1.Text += $"{buttonnn.Text}"; //label1.Location = new Point(label1.Location.X - 10, label1.Location.Y); count2++; } if (count2 >= 1) { count = 0; } }; } button18.Click += (s, e) => { label1.Text += $"{button18.Text}"; //label1.Location = new Point(label1.Location.X - 10, label1.Location.Y); count++; }; button19.Click += (s, e) => { count++; }; button17.Click += (s, a) => { label1.Text = null; //label1.Location = new Point(270, 7); }; button15.Click += (s, a) => { label1.Text += button15.Text; }; } private void button14_Click(object sender, EventArgs e) { count++; label1.Text += $"{button14.Text}"; //label1.Location = new Point(label1.Location.X - 10, label1.Location.Y); } public int count = 0; public int count2 = 0; public string line = ""; public int length = 0; DataTable dataTable = new DataTable(); //Здесь лучше один раз создать объект и его использовать NumberFormatInfo numberFormatInfo = new NumberFormatInfo //региональные настройки { NumberDecimalSeparator = "." }; private void button20_Click(object sender, EventArgs e) { double value = double.Parse(label1.Text, numberFormatInfo); value /= 100; label1.Text = value.ToString(numberFormatInfo); //length = label1.Text.Length; //label1.Location = new Point(270 - (length * 10), label1.Location.Y); } private void button2_Click(object sender, EventArgs e) { if (label1.Text == "") { } else { string str = label1.Text; double res = Convert.ToDouble(dataTable.Compute(str, null)); label1.Text = res.ToString(numberFormatInfo); //length = res.ToString().Length; //label1.Location = new Point(270 - (length * 10), label1.Location.Y); } } } }using System; using System.Data; using System.Drawing; using System.Linq; using System.Windows.Forms; using System.Globalization; namespace Калькулятор { public partial class Form1 : Form { public Form1() { InitializeComponent(); button20.Location = new Point(205, 45); //label1.Location = new Point(270, 7); foreach (Button buttones in panel2.Controls.OfType<Button>()) { buttones.Click += (s, a) => { count++; label1.Text += $"{buttones.Text}"; //label1.Location = new Point(label1.Location.X - 10, label1.Location.Y); }; } foreach (Button buttonnn in panel3.Controls.OfType<Button>()) { buttonnn.Click += (s, a) => { if (count >= 1) { label1.Text += $"{buttonnn.Text}"; //label1.Location = new Point(label1.Location.X - 10, label1.Location.Y); count2++; } if (count2 >= 1) { count = 0; } }; } button18.Click += (s, e) => { label1.Text += $"{button18.Text}"; //label1.Location = new Point(label1.Location.X - 10, label1.Location.Y); count++; }; button19.Click += (s, e) => { count++; }; button17.Click += (s, a) => { label1.Text = null; //label1.Location = new Point(270, 7); }; button15.Click += (s, a) => { label1.Text += button15.Text; }; } private void button14_Click(object sender, EventArgs e) { count++; label1.Text += $"{button14.Text}"; //label1.Location = new Point(label1.Location.X - 10, label1.Location.Y); } public int count = 0; public int count2 = 0; public string line = ""; public int length = 0; DataTable dataTable = new DataTable(); //Здесь лучше один раз создать объект и его использовать NumberFormatInfo numberFormatInfo = new NumberFormatInfo //региональные настройки { NumberDecimalSeparator = "." }; private void button20_Click(object sender, EventArgs e) { double value = double.Parse(label1.Text, numberFormatInfo); value /= 100; label1.Text = value.ToString(numberFormatInfo); //length = label1.Text.Length; //label1.Location = new Point(270 - (length * 10), label1.Location.Y); } private void button2_Click(object sender, EventArgs e) { if (label1.Text == "") { } else { string str = label1.Text; double res = Convert.ToDouble(dataTable.Compute(str, null)); label1.Text = res.ToString(numberFormatInfo); //length = res.ToString().Length; //label1.Location = new Point(270 - (length * 10), label1.Location.Y); } } } }[/spoiler]
Здравствуйте. Решил я значит усовершенствовать свой калькулятор, добавив кнопки корня и возведения в степень, но я уже 2 день не могу их толком реализовать. Хотя частично реализовал. Понятно, что просто выводить корень 9-ти очень легко. Но вот сложение корней и другие арифметические операции выдаются лишь с ошибками. У меня есть метод Compute(), который считывает текст и производит арифметические выражения. Но, как мне реализовать считывание с label1 символа радикала и возведения в корень? Есть ли такие символы? Просто с label.Text я получаю результат выражения, но как мне их занести в этот самый label ? Могу также кинуть то, что у меня работало, но там я писал так нелепо, лишь бы заработало. И есть еще 1 над которым сейчас работаю, но в общем-то тоже пока что не выходит. Что бы вы могли мне подсказать?
Цитата: Вася от 18.11.2021, 00:34Странно, у меня открывает. Тогда просто поменяйте в конструкторе формы TextAlign для label1 и замените код в Form1.cs на
Кодusing System;using System.Data;using System.Drawing;using System.Linq;using System.Windows.Forms;using System.Globalization;namespace Калькулятор{public partial class Form1 : Form{public Form1(){InitializeComponent();button20.Location = new Point(205, 45);//label1.Location = new Point(270, 7);foreach (Button buttones in panel2.Controls.OfType<Button>()){buttones.Click += (s, a) =>{count++;label1.Text += $"{buttones.Text}";//label1.Location = new Point(label1.Location.X - 10, label1.Location.Y);};}foreach (Button buttonnn in panel3.Controls.OfType<Button>()){buttonnn.Click += (s, a) =>{if (count >= 1){label1.Text += $"{buttonnn.Text}";//label1.Location = new Point(label1.Location.X - 10, label1.Location.Y);count2++;}if (count2 >= 1){count = 0;}};}button18.Click += (s, e) =>{label1.Text += $"{button18.Text}";//label1.Location = new Point(label1.Location.X - 10, label1.Location.Y);count++;};button19.Click += (s, e) =>{count++;};button17.Click += (s, a) =>{label1.Text = null;//label1.Location = new Point(270, 7);};button15.Click += (s, a) =>{label1.Text += button15.Text;};}private void button14_Click(object sender, EventArgs e){count++;label1.Text += $"{button14.Text}";//label1.Location = new Point(label1.Location.X - 10, label1.Location.Y);}public int count = 0;public int count2 = 0;public string line = "";public int length = 0;DataTable dataTable = new DataTable(); //Здесь лучше один раз создать объект и его использоватьNumberFormatInfo numberFormatInfo = new NumberFormatInfo //региональные настройки{NumberDecimalSeparator = "."};private void button20_Click(object sender, EventArgs e){double value = double.Parse(label1.Text, numberFormatInfo);value /= 100;label1.Text = value.ToString(numberFormatInfo);//length = label1.Text.Length;//label1.Location = new Point(270 - (length * 10), label1.Location.Y);}private void button2_Click(object sender, EventArgs e){if (label1.Text == ""){}else{string str = label1.Text;double res = Convert.ToDouble(dataTable.Compute(str, null));label1.Text = res.ToString(numberFormatInfo);//length = res.ToString().Length;//label1.Location = new Point(270 - (length * 10), label1.Location.Y);}}}}using System; using System.Data; using System.Drawing; using System.Linq; using System.Windows.Forms; using System.Globalization; namespace Калькулятор { public partial class Form1 : Form { public Form1() { InitializeComponent(); button20.Location = new Point(205, 45); //label1.Location = new Point(270, 7); foreach (Button buttones in panel2.Controls.OfType<Button>()) { buttones.Click += (s, a) => { count++; label1.Text += $"{buttones.Text}"; //label1.Location = new Point(label1.Location.X - 10, label1.Location.Y); }; } foreach (Button buttonnn in panel3.Controls.OfType<Button>()) { buttonnn.Click += (s, a) => { if (count >= 1) { label1.Text += $"{buttonnn.Text}"; //label1.Location = new Point(label1.Location.X - 10, label1.Location.Y); count2++; } if (count2 >= 1) { count = 0; } }; } button18.Click += (s, e) => { label1.Text += $"{button18.Text}"; //label1.Location = new Point(label1.Location.X - 10, label1.Location.Y); count++; }; button19.Click += (s, e) => { count++; }; button17.Click += (s, a) => { label1.Text = null; //label1.Location = new Point(270, 7); }; button15.Click += (s, a) => { label1.Text += button15.Text; }; } private void button14_Click(object sender, EventArgs e) { count++; label1.Text += $"{button14.Text}"; //label1.Location = new Point(label1.Location.X - 10, label1.Location.Y); } public int count = 0; public int count2 = 0; public string line = ""; public int length = 0; DataTable dataTable = new DataTable(); //Здесь лучше один раз создать объект и его использовать NumberFormatInfo numberFormatInfo = new NumberFormatInfo //региональные настройки { NumberDecimalSeparator = "." }; private void button20_Click(object sender, EventArgs e) { double value = double.Parse(label1.Text, numberFormatInfo); value /= 100; label1.Text = value.ToString(numberFormatInfo); //length = label1.Text.Length; //label1.Location = new Point(270 - (length * 10), label1.Location.Y); } private void button2_Click(object sender, EventArgs e) { if (label1.Text == "") { } else { string str = label1.Text; double res = Convert.ToDouble(dataTable.Compute(str, null)); label1.Text = res.ToString(numberFormatInfo); //length = res.ToString().Length; //label1.Location = new Point(270 - (length * 10), label1.Location.Y); } } } }using System; using System.Data; using System.Drawing; using System.Linq; using System.Windows.Forms; using System.Globalization; namespace Калькулятор { public partial class Form1 : Form { public Form1() { InitializeComponent(); button20.Location = new Point(205, 45); //label1.Location = new Point(270, 7); foreach (Button buttones in panel2.Controls.OfType<Button>()) { buttones.Click += (s, a) => { count++; label1.Text += $"{buttones.Text}"; //label1.Location = new Point(label1.Location.X - 10, label1.Location.Y); }; } foreach (Button buttonnn in panel3.Controls.OfType<Button>()) { buttonnn.Click += (s, a) => { if (count >= 1) { label1.Text += $"{buttonnn.Text}"; //label1.Location = new Point(label1.Location.X - 10, label1.Location.Y); count2++; } if (count2 >= 1) { count = 0; } }; } button18.Click += (s, e) => { label1.Text += $"{button18.Text}"; //label1.Location = new Point(label1.Location.X - 10, label1.Location.Y); count++; }; button19.Click += (s, e) => { count++; }; button17.Click += (s, a) => { label1.Text = null; //label1.Location = new Point(270, 7); }; button15.Click += (s, a) => { label1.Text += button15.Text; }; } private void button14_Click(object sender, EventArgs e) { count++; label1.Text += $"{button14.Text}"; //label1.Location = new Point(label1.Location.X - 10, label1.Location.Y); } public int count = 0; public int count2 = 0; public string line = ""; public int length = 0; DataTable dataTable = new DataTable(); //Здесь лучше один раз создать объект и его использовать NumberFormatInfo numberFormatInfo = new NumberFormatInfo //региональные настройки { NumberDecimalSeparator = "." }; private void button20_Click(object sender, EventArgs e) { double value = double.Parse(label1.Text, numberFormatInfo); value /= 100; label1.Text = value.ToString(numberFormatInfo); //length = label1.Text.Length; //label1.Location = new Point(270 - (length * 10), label1.Location.Y); } private void button2_Click(object sender, EventArgs e) { if (label1.Text == "") { } else { string str = label1.Text; double res = Convert.ToDouble(dataTable.Compute(str, null)); label1.Text = res.ToString(numberFormatInfo); //length = res.ToString().Length; //label1.Location = new Point(270 - (length * 10), label1.Location.Y); } } } }
Здравствуйте. Решил я значит усовершенствовать свой калькулятор, добавив кнопки корня и возведения в степень, но я уже 2 день не могу их толком реализовать. Хотя частично реализовал. Понятно, что просто выводить корень 9-ти очень легко. Но вот сложение корней и другие арифметические операции выдаются лишь с ошибками. У меня есть метод Compute(), который считывает текст и производит арифметические выражения. Но, как мне реализовать считывание с label1 символа радикала и возведения в корень? Есть ли такие символы? Просто с label.Text я получаю результат выражения, но как мне их занести в этот самый label ? Могу также кинуть то, что у меня работало, но там я писал так нелепо, лишь бы заработало. И есть еще 1 над которым сейчас работаю, но в общем-то тоже пока что не выходит. Что бы вы могли мне подсказать?
Цитата: Вася от 24.11.2021, 17:29Здравствуйте. Прежде чем загонять уравнение в метод Compute(), можно решить часть уравнения с возведением в степень или взятием кореня. Например есть 2 + 5^3 * 7 и из этого делаем 2 + 125 * 7 и загоняем в Compute(). Тут уже надо парсить. Квадратный корень можно заменить на x^0.5. Символы ^ и √ добавляются так же как и другие.
Здравствуйте. Прежде чем загонять уравнение в метод Compute(), можно решить часть уравнения с возведением в степень или взятием кореня. Например есть 2 + 5^3 * 7 и из этого делаем 2 + 125 * 7 и загоняем в Compute(). Тут уже надо парсить. Квадратный корень можно заменить на x^0.5. Символы ^ и √ добавляются так же как и другие.
Цитата: Тимур от 25.11.2021, 18:37Здравствуйте! Я не до конца объяснил ситуацию(но уже сам реализовал корень). Во-первых я сразу понял, что мне нужно будет находить число под знаком радикала, использовать метод Math.Sqrt и дальше передавать это значение в Compute(). Проблема скорее уже немного поменялась. Реализовать то я почти смог и думаю смогу, но то ли из-за шрифта, то ли из-за непонятно чего, в результате в label1 заносится текст, который мне не соответствует. Объясню: на клавиатуре нет знака радикала, как и степени, но я нашёл их в интернете. Поменяв текст button, которые и отвечают за выполнение этих задач, при нажатии я увидел, что это √ превращается в @, а ^ становится чем то похожим на 2 палочки. Ну т.е. совсем не то, что я ожидал увидеть. Очень хочется узнать, проблема в шрифте?Если да, то какой лучше выбрать? Или в чём тогда? И как же добавить символы, как на скриншоте. Я не всё еще знаю, да вроде и не должен.
Здравствуйте! Я не до конца объяснил ситуацию(но уже сам реализовал корень). Во-первых я сразу понял, что мне нужно будет находить число под знаком радикала, использовать метод Math.Sqrt и дальше передавать это значение в Compute(). Проблема скорее уже немного поменялась. Реализовать то я почти смог и думаю смогу, но то ли из-за шрифта, то ли из-за непонятно чего, в результате в label1 заносится текст, который мне не соответствует. Объясню: на клавиатуре нет знака радикала, как и степени, но я нашёл их в интернете. Поменяв текст button, которые и отвечают за выполнение этих задач, при нажатии я увидел, что это √ превращается в @, а ^ становится чем то похожим на 2 палочки. Ну т.е. совсем не то, что я ожидал увидеть. Очень хочется узнать, проблема в шрифте?Если да, то какой лучше выбрать? Или в чём тогда? И как же добавить символы, как на скриншоте. Я не всё еще знаю, да вроде и не должен.