タイトル : Re^5: 文字列によるプロパティの参照 投稿日 : 2012/01/21(Sat) 18:49 投稿者 : 魔界の仮面弁士
アプリ仕様が未だにイメージできずにいます…。 > 描画の変更というのは、単に重複している項目は赤の太文字にするだけなんです。 各項目は、どこで管理されているのでしょうか? 各フォーム? ユーザーコントロール? あるいはそれ以外の場所? それらの値は、一か所で管理されているのでしょうか。 それとも複数の場所に分散しているのでしょうか。 分散しているのだとしたら、それらをかき集めて重複判定を行う処理は どこが担当しているのでしょうか。 > でも、項目が20ほどありまして、相手の項目を一つずつ調べて描画するのでアクセス回数 > は都合400回。 20項目なら、400回ではなく20回な気がしますが…二乗した回数に なる理由がイメージできないです。 それに項目が何個あったとしても、値要求イベントの発行回数は 1回にまとめてリクエストすれば良い気がしますが、項目ごとに 個別に分けて発行しないと、何か都合が悪いのでしょうか? > いくらなんでも400回もイベントが起きたらパフォーマンス落ちるだろうな、と思ったんです 1回あたりの処理コストが示されていませんし、発生頻度にしても 1時間に400回なのか1秒間に400回なのか一回の再描画ごとに400回なのか、 説明されていませんので、パフォーマンスについては判断できかねます。 たとえば、 Private moveCount As Long = 0 Private Sub Form1_MouseMove(ByVal sender As Object, ByVal e As MouseEventArgs) Handles Me.MouseMove moveCount += 1 Debug.WriteLine(String.Format("{0} at {1:HH\:mm\:ss\.ffff}", moveCount, Now)) End Sub なコードを書いて、フォーム上でマウスカーソルをぐりぐり動かせば、 0.5秒〜10.0秒程度で、400回分のイベント通知に到達しますね。 (マウスの精度にもよりますが) > が、多分オブジェクト丸ごとも受け渡し出来ますよね? できますよ。というか、配列や Integer や String なども「オブジェクト」ですよね。 もちろん、独自定義の構造体やクラス、TextBox や Form などもオブジェクトです。 ここでいうオブジェクトというのは、何を指していますか? > 別フォームはイベントを受けたら自分のプロパティをIListにして、そのIListを1回で > 渡して、描画はIListを見て行えばいいんじゃないかって思いました。 その IList をどう使うのか、大まかなコードを見せてもらえませんか? > 最初は Winアプリを作って、追加→ユーザーコントロール として作ったんですが、 再利用する予定が無いなら、それで良いと思いますよ。 プロジェクトを分けてしまうと、かえって管理しにくいでしょうし。 > なぜかツールボックスに追加されず、 ツールボックスに追加されるかどうかは、[ツール]-[オプション]設定の [Windows フォーム デザイナ]-[全般]-[AutoToolboxPopulate] で決まります。 もちろんこの設定に頼らず、自分で手動追加することもできます。 > 手動で追加しなきゃいけないのかな?と思って、 > 表示されているフォルダを見てもファイルが無く、 ユーザーコントロールを追加した後で、まだ一度もプロジェクトを ビルドしていない場合には、そもそもツールボックスに載せられません。 ビルドした後だとすれば、ツールボックスを右クリックして [アイテムの選択...]からファイルを選べます。 VB2005 の場合、ビルド結果の EXE ファイルが プロジェクトのフォルダ\bin\Debug\ プロジェクトのフォルダ\bin\Release\ の下に出来るはずなので、そこから拾ってください。 なお、この出力先はプロジェクトのプロパティの [コンパイル]タブの[ビルド出力パス]で変更可能です。 > 検索しても uctlrAns.dll(←ユーザーコントロールの名前)というファイルは無かったので。 無いと思いますよ。DLL プロジェクトを作成したわけではありませんから。 自プロジェクト内にユーザーコントロールを追加しているのですから、 WindowsApplication1.exe などの、自EXEそのものを選択してあげましょう。 > インプリメントするって、フォームを作れば、 Interface の定義は、ユーザーコントロールの DLL にて行ってください。 それを参照している EXE 側では、通信相手となるフォームに 『Implements ステートメント』を記述します。 Public Class Form1 Implements IHoge あとは IHoge のメソッドの中身を書き加えて完成です。 > ただ、uctrlAnsは、全てのフォームで同じ名前を使っているので 名前が何故関係するのか分からないのですが、それはともかくとして。 Form1.uctrlAns1 が、Form2.uctrlAns1.Label1.Text を参照し、 Form2.uctrlAns1 も、Form1.uctrlAns1.Label1.Text を参照するのでしょうか? それとも Form1.uctrlAns1 が、Form2.Label1.Text を参照し、 Form2.uctrlAns1 が、Form1.Label1.Text を参照するのでしょうか? データの参照構造が今一つイメージできないのですが、互いに通信しあうのならば、 やはり「中継クラス」を作ってデータを管理した方が良い気がします。 |