- - PR -
パネル上のテキストボックスを全て入力不可に
投稿者 | 投稿内容 | ||||||||
---|---|---|---|---|---|---|---|---|---|
|
投稿日時: 2007-08-31 20:38
TableLayoutPanelを継承するクラスを作る。
TextBoxをn列Xm行配置する機能を実装する。 TextBoxをFor Each でLOOPさせ1つずつReadOnly = Trueする機能を実装する。 さまざまなカスタムコントロールの「拡張コントロール」を参照 http://msdn2.microsoft.com/ja-jp/library/ms171725(VS.80).aspx | ||||||||
|
投稿日時: 2007-08-31 22:03
じゃあ具体的に。 他の方や自分の為に、リフレクション有りと無しと両方書いておきます。 ですが、なびさんにはリフレクション無しのものをお勧めします。 継承を勉強しておかないと、.Netの恩恵は殆ど受けられません。 少なくとも、「リフレクション無し」の物を きちんと理解するところまでは勉強してから 使うことをお勧めします。
| ||||||||
|
投稿日時: 2007-09-01 16:06
れいさん、大変丁寧にありがとうございます。
早速試してみました。 ただどうしても気になるにが For Each c As Control In Me.ControlsでLOOPしている点です。 コントロールが200あったら200回まわしますよね。 そこでやはりパネルのEnableを設定するだけというのは 魅力的です。 よっし〜さんに、ご紹介頂いたサイトも見てみましたが パネル内のテキストボックスを黒く表示させる方法を 具体的にご教授頂けませんか。 宜しくお願いします。 | ||||||||
|
投稿日時: 2007-09-01 16:22
このスレでは初出ですよね?>LANVINさん。
TableLayoutPanelからMyTableLayoutPanelを作っているのですから、使う方はProperty(ReadOnly)をfalseにするだけですが・・。 [ メッセージ編集済み 編集者: shimix 編集日時 2007-09-01 16:23 ] | ||||||||
|
投稿日時: 2007-09-01 17:45
まわすことでパフォーマンスを気にしているのでしょうか? 実際、私も似たようなことをしているアプリケーションがありますが 気になるほどのものではありません。#スペックしだいかもしれませんが… shimixさんもおっしゃられているように一度作ってしまえば 使うときはプロパティ設定一つのみです。
紹介したリンク先に具体的に記載してありますよ? 但し、継承するのはTableLayoutPanelではなくTextBoxとなるはずですが。 それでもわからないというのであれば、『継承』を勉強してください。 #コンテナ内の子オブジェクトに対して、っていう方法をとれば #TableLayoutPanelでも実現できるのかな…?面倒かも。 | ||||||||
|
投稿日時: 2007-09-01 22:37
使うときはMyTableLayoutPanel.ReadOnlyを設定するだけですが、 それは理解していますか? それとも、O(n)であることを気にしているのですか? 最終的に、コントロールの外観が変更され、描画がおきます。 その際変更された全てのコントロールに関して描画がおきますので、 その時点でO(n)です。 ですので、どのような方法でReadOnlyにしようと、 O(n)より小さくはできません。 表示の更新は、変な実装だとO(n^2)になる場合もありますが、 今回はなりません。 速度的には大差ないことになります。 >そこでやはりパネルのEnableを設定するだけというのは >魅力的です。 これもO(n)になり、速度的には大差ありません。
なびさんにもいいましたが、 愚直なのは悪いことではありません。 自分がきちんと理解できる、実装できる範囲内の技術で 要求仕様を満たすのも技術のうちです。 リンク先の内容で理解できないのであれば、 より基礎的なところから勉強する必要があると 認識すべきでしょう。 |