tagCANDY CGI VBレスキュー(花ちゃん) の Visual Basic 2010 用 掲示板(VB.NET 掲示板)
VBレスキュー(花ちゃん) の Visual Basic 2010 用 掲示板(VB.NET 掲示板)
[ツリー表示へ]  [ワード検索]  [Home]

タイトル 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 を参照するのでしょうか?

データの参照構造が今一つイメージできないのですが、互いに通信しあうのならば、
やはり「中継クラス」を作ってデータを管理した方が良い気がします。

- 関連一覧ツリー をクリックするとツリー全体を一括表示します)

古いスレッドにレスはつけられません。