• ベストアンサー

テキストボックスの制限

VB2005にてプログラム作成を考えておりますが、一つのフォームに作成できるテキストボックスは何個まででしょうか? 経理的な物をで、科目数(120前後)*月(12)を考えております。 本来は分割すべきだとは思いますが、よろしくお願いします。

質問者が選んだベストアンサー

  • ベストアンサー
回答No.3

ちょっと興味があったので実験してみました。 (コードは以下のものを使用) Private Sub Form_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load  Dim j As Integer = 0  Dim i As Integer = 0  Try   Dim objText As TextBox   Me.SuspendLayout()   For j = 0 To 120    For i = 0 To 120     objText = New TextBox     objText.Location = New System.Drawing.Point(10, 10)     objText.Name = "Text" & j & i     objText.Size = New System.Drawing.Size(10, 10)     objText.Text = "Text" & j & i     Me.Controls.Add(objText)    Next   Next   Me.ResumeLayout(False)  Catch ex As Exception   Console.WriteLine(j & " " & i)  End Try End Sub 結果は私の環境では71 27を出力して終了しました。 つまり71*120 + 27 = 8547個までは可能といえば可能でした。^^; で、70*120の場合でやってみると立ち上がりはしましたが、反応が遅すぎて使い物になりませんでした。 で、問題のjのループ12でiのループ120では普通に入力が可能でした。 力技でなら普通に可能ですが、ANo.1のおっしゃるとおり、なんらかの方法で分割する事を考えた方がいいですね。。。

gonta_256
質問者

お礼

利用環境は殆どXPなのですが、数台98マシンがありますのでこれで7千も表時したら……あぁ~(笑 以前作った(SQL)-(Access)の場合、4分割でやったのですが、切換に時間がかかると不評だったものでして。 ありがとうございました。

その他の回答 (5)

noname#221739
noname#221739
回答No.6

単純に『GrapeCity SPREAD』『GrapeCity ElTabelle』ってなものを使えば早いのでは? 横列には各月。 縦行には必要な科目。 …ってので、楽勝では? それとも、客との契約上、こういったサードパーティ製OCXは利用できない、とか?

  • PED02744
  • ベストアンサー率40% (157/390)
回答No.5

Excelオブジェクトを呼び出して貼り付けるとか(^_^;) というか、むしろ、Excel+VBA+マクロで作った方が早そうと思ったりします。 VB2005限定でないのなら、製作言語の再考も考えた方がいいかも? DataGridView 2005が手元になくてわかりませんでした(VB2003はDataGridしかない) が、名称からすると使えそうですね。

gonta_256
質問者

お礼

ええ。確かにエクセルだと楽だとは思います(実際。以前エクセルで作ってました) ただし、エクセルだといろいろしでかす人が多いんです(笑 で、Accessで作ったのですが、テキストボックスの制限で、いくつか分割しても表示しきれない部分があったので、今回VBにしようかと思った次第です。 あと、質問で120*12と書いてますが、これは一回の表示でして、これに1000ヶ所と言うのがついてきますので実質エクセルでは……(ごめんなさい ありがとうございました。

  • Oh-Orange
  • ベストアンサー率63% (854/1345)
回答No.4

★『DataGridView』コントロールは便利そうですね。 ・私は C/C++ 言語系ですので『全部一度に見たい』場合はリストビュー・コントロールを使います。  リストビュー・コントロールとは、エクスプローラの『詳細(D)』の一覧です。→アイコン表示も  出来るヤツです。 ・多分『DataGridView』はリストビューをより使いやすくした VB 専用のコントロールでしょうね。 ・『リストビュー』や『DataGridView』コントロールで『表』を作って表示します。その後、  『各科目別%計算』と『縦の小計』は gonta_256 さんが自分で実装してみるのが良いでしょう。 ・上記のコントロールならば、スクロールバーでより多くの情報を見れますから。 ・以上。C/C++ 言語系の技術者より。

gonta_256
質問者

お礼

DataGridViewは、私もまだ試していないので何ともいえませんが、表示列の固定や行の背景色変更など、かなりエクセルライクだと感じました。 以前作ったAccessの場合、リスト関係は全部エクセルの印刷ビューを使ってましたが、ご承知の通り、項目数が多いので見づらいと不評でした(どねいせいっちゅうねん(笑) ありがとうございました

  • tsukachan
  • ベストアンサー率42% (202/470)
回答No.2

表示可能なフォームオブジェクトの最大数は開発環境側では無くブラウザに依存します。 IEやFirefoxであれば常識的に実用上必要な数であればOKだと思いますが、携帯やPDAなどでは制限が出てくるものもあります。 それらの仕様について書かれているサイトを見つけ切れませんでしたが、自分であれば対象となるブラウザを入手し検証するべきだと考えます。

gonta_256
質問者

お礼

プラウザに依存するんですか?しりませんでした。 まぁ、利用環境はPCオンリーなのでその辺は大丈夫だと思います。 ありがとうございました。

  • Oh-Orange
  • ベストアンサー率63% (854/1345)
回答No.1

★ダイアログ・エディタでは1フォームに最大 255 個です。 ・その後に API 関数の CreateWindow() などで作成すれば 65535 まで作成できますが、  論理上のお話で実用的ではありません。→リソース不足で起動できないなどの障害あり。 ・Windows では『テキストボックス』も1つのウインドウとして管理しているため、あまり  多くすると1フォームのウインドウを描画するのに時間がかかってしまいます。 ・科目数(120個)×月数(12個)=テキストボックス(1440個)は多すぎるので、科目数をコンボ  ボックスに変更して、月数(12個)だけをテキストボックスにするといいと思います。 ・以上。おわり。

gonta_256
質問者

お礼

早速の回答ありがとうございます。 本来ならOh-Orangeさんの言う通りにすべきなんでしょうが、「全部一度に見たい」と言う人が結構ありまして……(汗 DataGridViewを使うと各科目の%計算やら、縦の小計やらが出来ないですし……う~む。 ありがとうございました。

関連するQ&A

専門家に質問してみよう