Как вызвать метод класса Form из другого класса на C#?

Как вызвать метод класса Form из другого класса на C#?

Решил сделать простенькую программу, которая вычисляет из числа с плавающей запятой целую и дробную часть, но столкнулся с тем, что стандартные методы типа Convert.ToDouble или Double.TryParse на этапе компиляции вызывают исключения. Оказалось, что вся эта белиберда связана с тем, что в ОС Windows в настройках, разделителем целой и дробной части (см. рисунок ниже) выступает запятая, а я пихал числа с разделителем точка! Такие вещи прокатывали в Delphi, но не в C#.

Также оказалось довольно-таки проблематично вызвать метод одного класса из другого класса. Но как говорится, кто ищет — тот всегда найдёт!

Как видим разделителем в системе по умолчанию выступает запятая

Создаём проект

На форме помещаем три textBox и одну button.

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;

namespace WindowsFormsApplication42
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }
        public double f;
        public class MyClass
        {

            public static TextBox EditText1 = new TextBox();
            public string StrText = EditText1.Text;
            public void CalculateIntAndDouble(Form1 form)
            {
                form.textBox2.Text = Convert.ToString(Math.Truncate(Convert.ToDouble(this.StrText)));
                form.textBox3.Text = Convert.ToString(form.f - Convert.ToInt32(form.textBox2.Text));

            }

        }
        private void button1_Click(object sender, EventArgs e)
        {
            string text;
            f = 0;
            text = textBox1.Text;
            Char separator = System.Globalization.CultureInfo.CurrentCulture.NumberFormat.CurrencyDecimalSeparator[0];
            String Source = text.Replace('.', separator);
            f = Convert.ToDouble(Source);
            MyClass.EditText1.Text = Convert.ToString(f);
            MyClass myClass2 = new MyClass();
            myClass2.CalculateIntAndDouble(this);
        }
    }
}

p.s. Или наоборот: System.Threading.Thread.CurrentThread.CurrentCulture = new System.Globalization.CultureInfo(«en-US»);

p.s.s. И не надо ничего реплейсить

 

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *