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

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

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

Re[18]: textBoxの文字数制限について。 [1]


(過去ログ 51 を表示中)

[トピック内 42 記事 (21 - 40 表示)]  << 0 | 1 | 2 >>

■28158 / inTopicNo.21)  Re[11]: textBoxの文字数制限について。
  
□投稿者/ .SHO (119回)-(2008/11/20(Thu) 16:24:11)
No28155 (C#初心者 さん) に返信

>>>>日本語入力 = 入力時に点線が出る状態で半角数字を打ったときに12文字以上入る(ように見える)、
>>>>ことを「12と制御したけど入力できてしまう」とおっしゃってる……ことはないですよね…?
>
> 今確認してみたのですが、デバッグしてもtextBoxに直接書き込めちゃいます・・・。

いや、なんか聞いてることと回答がかみ合ってないです。
引用返信 編集キー/
■28159 / inTopicNo.22)  Re[12]: textBoxの文字数制限について。
□投稿者/ nakaP (1回)-(2008/11/20(Thu) 16:34:24)
ひょっとして、入力が「キーボード入力」ではなく「ソース内からの設定」のことではないですか?
以下のコードだとMaxLength以上「表示」されます。

    private void Form1_Load(object sender, EventArgs e) {
        this.textBox1.MaxLength = 12;
        this.textBox1.Text = "12345678901234567890";
    }

引用返信 編集キー/
■28160 / inTopicNo.23)  Re[13]: textBoxの文字数制限について。
□投稿者/ C#初心者 (34回)-(2008/11/20(Thu) 16:47:32)
2008/11/20(Thu) 16:48:09 編集(投稿者)
一応全体のコードを載せてみます。


namespace 計算機VS2008
{
    public partial class Form1 : Form
    {

        double dData1 = 0;        //数値1を記憶する
        double dData2 = 0;        //数値2を記憶しているかどうか?
        Boolean SuuFlag;          //数字キー用
        Boolean EFlag;            //演算キー用
        int Enzan;                //演算種類記憶用(+:0,-:1,*:2,/:3,=:4,)
        const int NONE = -1;
        const int TASU = 0;
        const int HIKU = 1;
        const int KAKERU = 2;
        const int WARU = 3;
        const int EQU = 4;



        public Form1()
        {
            
            InitializeComponent();
        }

        private void Form1_Load(object sender, EventArgs e)
        {
            txtDisp.Text = "0";
            dData1 = 0;             //数値記憶用変数の初期化
            dData2 = 0;
            Enzan = NONE;           //演算種類初期化
            SuuFlag = false;
            EFlag = false;

        }

        //「C」ボタン
        private void btnClear_Click(object sender, EventArgs e)
        {
            txtDisp.Text = "0";
            dData1 = 0;
            dData2 = 0;
            SuuFlag = false;
            EFlag = false;
        }
        //「+」ボタン
        private void btnPlus_Click(object sender, EventArgs e)
        {
            SetMemory(0);
        }
        //「-」ボタン
        private void btnMin_Click(object sender, EventArgs e)
        {
            SetMemory(1);
        }
        //「×」ボタン
        private void btnMil_Click(object sender, EventArgs e)
        {
            SetMemory(2);
        }
        //「÷」ボタン
        private void btnDiv_Click(object sender, EventArgs e)
        {
            SetMemory(3);
        }
        //「=」ボタン
        private void btnEqual_Click(object sender, EventArgs e)
        {
            SetMemory(4);
        }
        //演算キー
        private void SetMemory(int nSet)
        {
            //数字キーを押した後
            if (SuuFlag == true)
            {
                if (EFlag == false)
                {
                    dData1 = double.Parse(txtDisp.Text);    //1つ目の数値記憶
                    EFlag = true;
                }

                else
                {
                    dData2 = double.Parse(txtDisp.Text);    //2つ目の数値記憶
                }


                if (nSet != EQU)    //=以外の時
                {
                    keisan();
                    Enzan = nSet;
                    dData2 = 0;
                    
                }
                else
                {
                    keisan();
                    EFlag = false;
                }
                txtDisp.Text = dData1.ToString().Trim();
            }
            else if (nSet == EQU)            //等号キーを押した後
            {
                if (dData2 == 0)
                {
                    dData2 = dData1;
                }

                txtDisp.Text = dData1.ToString().Trim();
                EFlag = false;
            }
            else            //四則演算キーを押した後
            {
                dData1 = double.Parse(txtDisp.Text);
                dData2 = 0;
                Enzan = nSet;
                EFlag = true;

            }
            SuuFlag = false;
            
        }
        //四則演算
        private void keisan()
        {

            if (Enzan == TASU)              //加算
            {
                dData1 = dData1 + dData2;
            }
            else if (Enzan == HIKU)         //減算
            {
                dData1 = dData1 - dData2;
            }
            else if (Enzan == KAKERU)       //乗算
            {
                dData1 = dData1 * dData2;
            }
            else if (Enzan == WARU)         //除算
            {
                if (dData2 != 0)
                {
                    dData1 = dData1 / dData2;
                }
                else
                {
                    MessageBox.Show("われません");
                }

            }
           
        }

        //「.」小数点ボタン
        private void btnpoint_Click(object sender, EventArgs e)
        {
            int point;
            point = txtDisp.Text.IndexOf(".");

            if (point > 0)          //小数点が既にあるのか
            {
                return;
            }
            else                  //小数点がない時追加
            {
                txtDisp.Text = txtDisp.Text += ".";
            }
        }
        //「+/-」ボタン
        private void btnHanten_Click(object sender, EventArgs e)
        {
            if (txtDisp.Text.Substring(0, 1) == "-")
            {
                txtDisp.Text = txtDisp.Text.Remove(0, 1);
            }
            else
            {
                txtDisp.Text = "-" + txtDisp.Text;
            }
        }
        //「0〜9」の数字ボタン
        private void btn_Click(object sender, EventArgs e)
        {
            if (txtDisp.Text == "これ以上無理!")
            {
                return;
            }
           
            if (txtDisp.Text == "0" || SuuFlag == false)
            {
                txtDisp.Text = "";
                dData2 = 0;
            }

            if (txtDisp.Text == "0")
            {
                txtDisp.Text = "";
            }

            if (txtDisp.Text == "0")
            {
                txtDisp.Text = (((System.Windows.Forms.Button)sender).Text);
            }
            else
            {
                txtDisp.Text = txtDisp.Text += (((System.Windows.Forms.Button)sender).Text);
            }
            SuuFlag = true;

            int nlen = txtDisp.TextLength;

            if (nlen > 12)                      //ディスプレイに10桁以上入力された時
            {
                txtDisp.Text = "これ以上無理!";
            }

        }
        //「BackSpace」ボタン
        private void btnBackSpace_Click(object sender, EventArgs e)
        {
            int nLen = txtDisp.Text.Length;

            if (nLen != 1)
            {
                txtDisp.Text = txtDisp.Text.Remove(nLen - 1, 1);
            }
            else if (nLen == 1)
            {
                txtDisp.Text = txtDisp.Text.Remove(0, 1);
            }

            if ((nLen == 1) || (txtDisp.Text == "-"))
            {
                txtDisp.Text = "0";
            }


        }

      
      }
}

引用返信 編集キー/
■28162 / inTopicNo.24)  Re[14]: textBoxの文字数制限について。
□投稿者/ .SHO (120回)-(2008/11/20(Thu) 16:55:48)
2008/11/20(Thu) 16:56:06 編集(投稿者)
No28160 (C#初心者 さん) に返信

> 一応全体のコードを載せてみます。

>         private void Form1_Load(object sender, EventArgs e)
>         {
>             txtDisp.Text = "0";
>             dData1 = 0;             //数値記憶用変数の初期化
>             dData2 = 0;
>             Enzan = NONE;           //演算種類初期化
>             SuuFlag = false;
>             EFlag = false;
> 
>         }

あのさ、MaxLength 設定してないけど orz

引用返信 編集キー/
■28163 / inTopicNo.25)  Re[14]: textBoxの文字数制限について。
□投稿者/ 魔界の仮面弁士 (905回)-(2008/11/20(Thu) 16:57:31)
2008/11/20(Thu) 17:10:32 編集(投稿者)
2008/11/20(Thu) 17:05:19 編集(投稿者)

No28160 (C#初心者 さん) に返信
> txtDisp.Text = dData1.ToString().Trim();

string.Format (あるいは、書式指定の ToString メソッド)を使うべきかと。

また、ここで Text プロパティへ代入していますが、これが No28142

> 入力するのでは無く、プログラムから Text プロパティを
> 代入するのであれば、制限以上の文字を渡せますが…。

に該当している可能性が無いか、もう一度確認しなおしてみてください。

---
追記

No28162 (.SHO さん) に返信
> あのさ、MaxLength 設定してないけど orz

No28140 では「入力」という表現をされていましたし、
No28147 , No28151 で書かれている内容と合わせて判断すると、
恐らくは VS 上で設定しているのでしょうから
>> InitializeComponent();
に含まれていると見るのが妥当かと思いますよ。

# No28143 のコードは、説明/確認のために書いただけかな、と予想。
引用返信 編集キー/
■28164 / inTopicNo.26)  Re[15]: textBoxの文字数制限について。
□投稿者/ カドルドエグ (52回)-(2008/11/20(Thu) 16:59:01)
No28162 (.SHO さん) に返信
もしかしてデザイナ側のプロパティ欄で設定する方に切り替えたのでは?
引用返信 編集キー/
■28165 / inTopicNo.27)  Re[16]: textBoxの文字数制限について。
□投稿者/ .SHO (121回)-(2008/11/20(Thu) 17:03:41)
No28164 (カドルドエグ さん) に返信

> もしかしてデザイナ側のプロパティ欄で設定する方に切り替えたのでは?

そうかな? とも思ったんですが1言書いて欲しいです。
引用返信 編集キー/
■28166 / inTopicNo.28)  Re[15]: textBoxの文字数制限について。
□投稿者/ C#初心者 (35回)-(2008/11/20(Thu) 17:05:33)
No28162 (.SHO さん) に返信
> 2008/11/20(Thu) 16:56:06 編集(投稿者)
>
> >
> あのさ、MaxLength 設定してないけど orz

設定してたんですけど、あっても
機能しないから消したんです。
引用返信 編集キー/
■28167 / inTopicNo.29)  Re[16]: textBoxの文字数制限について。
□投稿者/ .SHO (122回)-(2008/11/20(Thu) 17:09:16)
No28166 (C#初心者 さん) に返信

> 設定してたんですけど、あっても
> 機能しないから消したんです。

もしかして、デザイナ側も機能しないから消した???
引用返信 編集キー/
■28169 / inTopicNo.30)  Re[17]: textBoxの文字数制限について。
□投稿者/ C#初心者 (36回)-(2008/11/20(Thu) 17:13:52)
No28167 (.SHO さん) に返信
> ■No28166 (C#初心者 さん) に返信
>
>>設定してたんですけど、あっても
>>機能しないから消したんです。
>
> もしかして、デザイナ側も機能しないから消した???

いえ、デザイナ側は消してません。
引用返信 編集キー/
■28172 / inTopicNo.31)  Re[18]: textBoxの文字数制限について。
□投稿者/ 倉田 有大 (350回)-(2008/11/20(Thu) 17:29:15)
むう!読んでいてさっぱりわからん!

1)新規プロジェクトを作成
2)テキストボックスを貼り付ける
3)デザイナ側からMaxLengthを12に指定

これで動作するか確認してみてください(試したら一発で動いたけど)

画面に複数のTextBoxがあるとかエスパー推測
引用返信 編集キー/
■28173 / inTopicNo.32)  Re[14]: textBoxの文字数制限について。
□投稿者/ カドルドエグ (53回)-(2008/11/20(Thu) 17:33:56)
No28160 (C#初心者 さん) に返信
> 2008/11/20(Thu) 16:48:09 編集(投稿者)
>
> 一応全体のコードを載せてみます。
VS2005でですが、コードから読み取れるだけのコントロールを配置して、
全く同じ条件でやってみました。

「(「これ以上無理!」というテキスト表示をコメント化して)数字ボタンを押して」入力すると、確かにMaxLengthを設定していても入ります。
というのも、これまでに何回か出ていますが「プログラミングからの入力」になるからです。

デザイナ側の設定は消していないとのことですので、
txtDisp(ReadOnlyにしていたらそれを解除)に「手入力で」数字を入れると
12文字を超えた文字は入らないはずです。
引用返信 編集キー/
■28175 / inTopicNo.33)  Re[15]: textBoxの文字数制限について。
□投稿者/ C#初心者 (37回)-(2008/11/20(Thu) 18:00:55)
No28173 (カドルドエグ さん) に返信
> txtDisp(ReadOnlyにしていたらそれを解除)に「手入力で」数字を入れると
> 12文字を超えた文字は入らないはずです。

「手入力」は、普通にボタンをクリックってことですか?


引用返信 編集キー/
■28176 / inTopicNo.34)  Re[16]: textBoxの文字数制限について。
□投稿者/ みきぬ (238回)-(2008/11/20(Thu) 18:11:36)
No28175 (C#初心者 さん) に返信
> ■No28173 (カドルドエグ さん) に返信
>>txtDisp(ReadOnlyにしていたらそれを解除)に「手入力で」数字を入れると
>>12文字を超えた文字は入らないはずです。
>
> 「手入力」は、普通にボタンをクリックってことですか?
>
TextBox に入力フォーカスが表示されている状態で、"キーボードの" 文字キーやテンキーなどを押したりすることを指します。

電卓アプリの数字ボタンをクリックして、プログラムコードで txtDisp.Text += "1" とかやることを、「手入力」とは普通はいわ…ないとも言い切れないのだろうか(悩

# でもまあスッキリした。
引用返信 編集キー/
■28178 / inTopicNo.35)  Re[16]: textBoxの文字数制限について。
□投稿者/ カドルドエグ (54回)-(2008/11/20(Thu) 18:15:58)
No28175 (C#初心者 さん) に返信
> ■No28173 (カドルドエグ さん) に返信
>>txtDisp(ReadOnlyにしていたらそれを解除)に「手入力で」数字を入れると
>>12文字を超えた文字は入らないはずです。
>
> 「手入力」は、普通にボタンをクリックってことですか?
>
>
少々説明不足でした…。。

数字ボタンで入力→今回の電卓で使用している「ボタンコントロール」をクリック
手入力での入力→キーボード(テンキーでも文字の上にあるキーでも)からの入力

#と書いてたら既にみきぬさんがご指摘済。。ありがとうございます&申し訳ありません。。

引用返信 編集キー/
■28180 / inTopicNo.36)  Re[17]: textBoxの文字数制限について。
□投稿者/ C#初心者 (38回)-(2008/11/20(Thu) 18:24:53)
今の自分のプログラムでは必ず12桁以上入力されてしまうってことですか?
引用返信 編集キー/
■28181 / inTopicNo.37)  Re[17]: textBoxの文字数制限について。
□投稿者/ .SHO (124回)-(2008/11/20(Thu) 18:26:49)
なんかスッキリしないなぁ^^;

13文字目が入ったら「これ以上無理!」って出るんですよね。
それも確認のために入れただけ?

それに VB ではこれで動いてたんですよね?

まぁ、いっか。。。
引用返信 編集キー/
■28185 / inTopicNo.38)  Re[18]: textBoxの文字数制限について。
□投稿者/ .SHO (125回)-(2008/11/20(Thu) 18:36:03)
No28180 (C#初心者 さん) に返信

> 今の自分のプログラムでは必ず12桁以上入力されてしまうってことですか?

「これ以上無理!」は確認のために入れただけで、そこは通ってるという前提で話すと
txtDisp.Text += (((System.Windows.Forms.Button)sender).Text);
ってする前に文字数チェックして、超えたら
txtDisp.Text += (((System.Windows.Forms.Button)sender).Text);
をやらなければいいんじゃないの?
引用返信 編集キー/
■28186 / inTopicNo.39)  Re[18]: textBoxの文字数制限について。
□投稿者/ C#初心者 (39回)-(2008/11/20(Thu) 18:36:44)
皆様多大なご迷惑をお掛けして申し訳ございませんでした。

皆様のお陰で無事解決することが出来ました。

本当にありがとうございました。
解決済み
引用返信 編集キー/
■28187 / inTopicNo.40)  Re[18]: textBoxの文字数制限について。
 
□投稿者/ まんごーぷりん (38回)-(2008/11/20(Thu) 18:37:41)
まんごーぷりん さんの Web サイト
No28180 (C#初心者 さん) に返信
> 今の自分のプログラムでは必ず12桁以上入力されてしまうってことですか?

こういう時は、まずミニマムコードを作って検証すべきかと

具体的には、Windows フォームアプリケーションプロジェクトを新規に作成して、テキストボックスをひとつだけ配置して、MaxLength プロパティに 12 とだけ指定して実行です。

目的通り動きますよね?

動いたら、今のプロジェクトのフォームにテキストボックスを更に一つ追加して、同じことをしてみます。

そうやって問題の切り分けをして、どこに問題があるのかを特定していくことで多くの問題は解決できますよ。
引用返信 編集キー/

<前の20件 | 次の20件>
トピック内ページ移動 / << 0 | 1 | 2 >>

管理者用

- Child Tree -