C# と VB.NET の質問掲示板

わんくま同盟

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト


(過去ログ 144 を表示中)
■84454 / )  C#での文字数制限について。(期限が近く、急いでいます!)
□投稿者/ ひかり (1回)-(2017/07/06(Thu) 10:09:51)

分類:[C#] 

2017/07/06(Thu) 10:16:20 編集(投稿者)
はじめまして。ひかりといいます。
Visual Studio、C#を学び始めて1週間ほどの初心者です。

現在、Visual StudioでC#を使って「電卓」を作っています。
期限が今日の17時と差し迫っています。
どなたか、お力をお貸しください…。

ディスプレイに入力される文字数に10桁の文字数制限をかけたいです。
デザインのプロパティから「MaxLength」の数値を変更したところ、
ディスプレイにキーボードから入力される場合の文字数制限はかかりました。
ですが、数字ボタンを押しで入力される文字数に関しては制限がかかりませんでした。

形としては、ボタンを押した入力に文字数制限をかけて、
計算結果の桁数が11桁以上になる場合はディスプレイに答えの代わりに「E」と表示されるようにしたいです。

よろしくお願いいたします。


※数字ボタンを「btnNumber」、入力された文字や計算結果の表示されるディスプレイを
 「txtDisplay」(テキストボックス)と名前付けしています。


以下、現在のソースコードです。
―――――――――――――――――――――――――――――――――――――――――――――――――――――――

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 Cal
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        //boolでisFirstを代入。
        bool isFirst = true;
        //decimalで値1を代入。
        decimal 値1 = 0;

        private void btnNumber_Click(object sender, EventArgs e)
        {
            if (isFirst)
            {
                txtDisplay.Text = "";
                isFirst = false;
            }
            String text = txtDisplay.Text + ((Button)sender).Text;
            //文字列を数字に。
            decimal d = Convert.ToDecimal(text);
            //数字を文字列に。(先頭の“0”が消える)
            String text2 = d.ToString();
            txtDisplay.Text = text2;
        }

        //クリア。
        private void btnC_Click(object sender, EventArgs e)
        {
            演算 = 四則演算の記号.未定義;
            txtDisplay.Text = "0";
            値1 = 0;
            isFirst = true;
        }

        //小数点。
        private void btnDot_Click(object sender, EventArgs e)
        {
            //四則演算の記号を押された直後の . にも対応。(0. と続くようになる)
            if (isFirst)
            {
                txtDisplay.Text = "0";
                isFirst = false;
            }
            //小数点の重複チェック。
            if (txtDisplay.Text.IndexOf(".") >= 0)
            {
                //既に小数点がある。
                return;
            }
            txtDisplay.Text = txtDisplay.Text + ".";
            isFirst = false;
        }

        //“enum”で名前を付ける。
        enum 四則演算の記号 { 未定義, ADD, SUB, MUL, DIV };
        四則演算の記号 演算 = 四則演算の記号.未定義;

        //足し算。
        private void btnAdd_Click(object sender, EventArgs e)
        {
            if (!isFirst) calc();
            演算 = 四則演算の記号.ADD;
        }

        //引き算。
        private void btnSub_Click(object sender, EventArgs e)
        {
            if (!isFirst) calc();
            演算 = 四則演算の記号.SUB;
        }

        //掛け算。
        private void btnMul_Click(object sender, EventArgs e)
        {
            if (!isFirst) calc();
            演算 = 四則演算の記号.MUL;
        }

        //割り算。
        private void btnDiv_Click(object sender, EventArgs e)
        {
            if (!isFirst) calc();
            演算 = 四則演算の記号.DIV;
        }

        //イコール。
        private void btnEqu_Click(object sender, EventArgs e)
        {
            calc();
        }

        //イコールを複数回続けて押したときのために、もともとの数値(それまでの計算の答え)を tmp に保管しておく。
        decimal tmp;
        private void calc()
        {
            decimal 値2;
            if (isFirst)
            {
                値2 = tmp;
            }
            else
            {
                値2 = Convert.ToDecimal(txtDisplay.Text);
                tmp = 値2;
            }

            switch (演算)
            {
                case 四則演算の記号.ADD:
                    値1 += 値2;
                    break;
                case 四則演算の記号.SUB:
                    値1 -= 値2;
                    break;
                case 四則演算の記号.MUL:
                    値1 *= 値2;
                    break;
                case 四則演算の記号.DIV:
                    値1 /= 値2;
                    break;
                default:
                    値1 = 値2;
                    break;
            }

            txtDisplay.Text = 値1.ToString();
            isFirst = true;
        }

        private void Form1_Load(object sender, EventArgs e)
        {
            //テキストボックスを使用したtxtDisplayを読み取り専用にする。
            this.txtDisplay.ReadOnly = true;
        }

        private void txtDisplay_TextChanged(object sender, EventArgs e)
        {
            if (isFirst)
            {

            }
        }

    }
}

返信 編集キー/


管理者用

- Child Tree -