- PR -

Formに配置できるコントロール数には限界がある?

投稿者投稿内容
かにかに
会議室デビュー日: 2005/03/23
投稿数: 18
投稿日時: 2006-02-20 13:49
すいません。
囚人 様からも返信いただいていましたね。
見落としてしまいました。

私もなぜその中途半端な数なのだろうと思っていましたが、おそらくya 様からご指摘いただいた「デスクトップアプリケーションヒープ」の都合ではないでしょうかね。
じゃんぬねっと
ぬし
会議室デビュー日: 2004/12/22
投稿数: 7811
お住まい・勤務地: 愛知県名古屋市
投稿日時: 2006-02-20 13:56
引用:

かにかにさんの書き込み (2006-02-20 13:40) より:

もし、可能でしたらスタックトレースの取り方を教えていただけるでしょうか?


かにかにさんのソースを一部流用させて頂きますね。

コード:

    Try
        For i As Integer = To Integer.MaxValue
            Dim oTextBox As TextBox = New TextBox()
            Me.Controls.Add(oTextBox)
        Next i
    Catch ex As Exception
        MessageBox.Show("かにかにどこかに? : " & ex.ToString())
    End Try


まあ、メモリ不足だったら「ハンドルの作成中に〜」はありえないかな。

_________________
C# と VB.NET の入門サイト
じゃんぬねっと日誌
甕星
ぬし
会議室デビュー日: 2003/03/07
投稿数: 1185
お住まい・勤務地: 湖の見える丘の上
投稿日時: 2006-02-20 14:06
[quote]
かにかにさんの書き込み (2006-02-20 13:40) より:
返信ありがとうございます。
じゃんぬねっと 様
すいません。スタックトレースという言葉は聞いたことがあり意味もなんとなく分かるのですが、VB.NETのスタックトレースの取り方というのが分からずググっていました。...が、やり方が依然として分かりません。
もし、可能でしたらスタックトレースの取り方を教えていただけるでしょうか?
[quote]
例外が発生した時点で、"呼び出し履歴"ウィンドウを見てください。例外メッセージそのものにもスタックとレース情報が含まれているので、そちらを診てもOKです。

例えばAccessやOffice製品では大量のコントロールを表示する為にウィンドウズ標準のコントロールを使いません。市販の帳票ツールや、入力ツール、グリッドツールでも同様です。

素直にグリッド系のツールを利用するか、大量の標準コントロールを使わないように実装するか、大量のコントロールを表示しなくても良いように画面デザインを変更する必要があるでしょう。
かにかに
会議室デビュー日: 2005/03/23
投稿数: 18
投稿日時: 2006-02-20 14:40
返答ありがとうございます。

じゃんぬねっと 様
ご教授いただいたコードを実行してみたところ、MessageBoxすら表示できないようなエラーのようです。今回は特殊な例なのかもしれませんね。Debug.WriteLineなどでは表示できました。
取得の仕方が分かって勉強になりました。


甕星 様
今回は『大量のコントロールを表示しなくても良いように画面デザインを変更する』方向で設計を変えようと思います。ありがとうございました。
渋木宏明(ひどり)
ぬし
会議室デビュー日: 2004/01/14
投稿数: 1155
お住まい・勤務地: 東京
投稿日時: 2006-02-20 15:00
引用:

グリッドのようなものに明細を数百行表示したいのですが、それぞれ1明細の中にさらにサブ明細を数十行持っているのです。また、そのグリッドでデータの編集も行い、検索ボタンなども付いています。よってDataGridを使用するのをあきらめ、明細とサブ明細それぞれの1行分のUserControlを作り、それをPanelに貼り付けて擬似グリッドとして使用しようという考えでした。



ありがちなハマりパターンですね

実際に、同時に利用可能なコントロールの数には制限があるため、何らかの工夫をしなくてはならないです。

例えば、Excel や一般的な Grid では各セル項目が編集できますが、あれはすべてのセル分のエディットコンとトールを持っているわけではありません。

セルが編集状態になった時に、隠し持っていた1つ(か、内部的な事情によってそれ以上持っているかもしれませんが)のエディットコントロールをその位置に移動して、項目の入力をさせています。

サブ明細用のコントロールを「表示用」と「編集用」の2つを作成し、これらを使い分ければいいかもしれないですね。
ya
大ベテラン
会議室デビュー日: 2002/05/03
投稿数: 212
投稿日時: 2006-02-20 17:01
ものすっごい雑談だけど、WebBrowserコントロールとかWPFを使うという手はあります。
この辺になるとコントロール(フォーム)はuser32リソースからはだいぶ開放されるので。

WPFはさすがに環境がないのでWebBrowserに100000個 <input type="text"> を張ってみましたけど普通に動きますね。読み込みには時間がかかるけど。

スキルアップ/キャリアアップ(JOB@IT)