• ベストアンサー

オブジェクトに値を保持させるにはプロパティに追加ですか?

あんらいぷ ぜろいち(@Unripe01)の回答

回答No.3

共有プロパティって、 静的メンバ、つまりSharedのことですよね。 値渡しと参照渡し、また静的メンバ の事をよく知らずに使ってしまうと特にマルチスレッドのプログラムを作る時にえらい事になるので。 今は使わないほうがいいでしょう。 まだ コピーできなくて うんうん悩む方がましです(笑) >>プロパティ設定済みのオブジェクトをオブジェクト型に代入すると>>プロパティは付いてきますか? ざっくり言うと、 そのプロパティが「値型(integetとかVB.netで用意されている型)」ならついてきますし、 「参照型(オブジェクト)」なら、参照のコピー。(つまり、ショートカットのコピー) が渡されます。  値型、参照型については調べてみて下さい。 どちらでコピーしても、 オブジェクトを代入した変数から、対象となるプロパティを見たら値が取れるはずです。 そもそも取れないというのは「オブジェクト参照がどうのこうの~」って例外がでるんですか? それなら多分コーディングが間違ってると思うので、 ソースUPする方が早いかもしれません。 って、VB.net VS2005のつもりで話ししてますがあってますか? とりあえず、 参考URL先に オブジェクトの中身を全部コピーする方法があるのでやってみてください。

参考URL:
http://blogs.wankuma.com/jeanne/archive/2006/04/07/22287.aspx
rescue98
質問者

お礼

ありがとうございます。 もうじき?Visual Studio 2010が出るので、 出たらすぐ使えるようにするために、Visual Studio 2005を先に本で勉強しています。 本にはこう書いていました。 オブジェクト参照はオブジェクトのアドレスのコピーが渡される。←これは参照渡しのことですね。 オブジェクト参照をプロシージャに渡し、元のオブジェクトに影響を与えないようにするには、オブジェクトのコピーを自分で作成します. オブジェクトのコピーは、新しいオブジェクトを生成し、すべてのプロパティを正しく初期化する必要があります。←ここで? オブジェクトのプロパティの数が多い場合は、コードがかなり必要になります。←???? 以上のことが書いていました。 プロパティがあると初期化しないといけない、その数分コードを書かないといけない・・・と判断しました。 この3行目で?になったので、先に進めません・・・ 本を何回か解読して、わかったかも知れません! これは「参照渡しの値渡し」のことなのかもしれません。 ByRefキーワードの引数を()で囲むことで引数を値渡しにできます。 参照渡しの値渡しは、プロパティが引き継がれないということかなという結論に達しました。 参照渡しの値渡しは、プロパティは自力で入れる必要がある。ということで合っていますか?

関連するQ&A

  • VBAのオブジェクトの値を保持しておくには

    ExcelのVBAにおいて、Deleteメソッドを使用して、 オブジェクトを削除する場合に、削除前に保持データを丸々待避させる よい方法はないでしょうか。 例)グラフタイトルのフォントスタイルを書き戻す。 1. ActiveChart.ChartTitle.Fontの内容を待避させる。 2. Deleteでタイトルを消す。 ActiveChart.ChartTitle.Delete 3. 間に種々処理を行う。 4. 新しいタイトルをつける。 ActiveChart.HasTitle = True ActiveChart.ChartTitle.Characters.Text = "foo" 5. ActiveChart.ChartTitle.Fontの内容を新しいタイトルに適用する。 プロパティーを列挙して変数に格納する方法を試したましたが、 プロパティーの数だけコードを書かなければならないので断念しました。 通常の変数であれば、 1. 規定値をセット(A=1) 2. 退避用の変数にAを保持させる(B=A) 3. Aに対して操作を行う 4. 待避した値をAに書き戻す(A=B) というようなことができるのですが。 オブジェクトにSet等を試しましたが、Setを使ってオブジェクトを入力した場合、 もとオブジェクトの変化に対して動的に値が変化するため、待避できませんでした。 どなたか、わかる方がいらっしゃいましたら、よろしくお願いいたします。 使用環境 WindowsXP SP2 Excel 2002 SP3

  • ユーザーコントロールのプロパティの値の保持

    ユーザーコントロールを作成して、使用しているのですが、独自のプロパティを作成し、実際に配置した複数のコントロールで、各々値を設定しても、プロジェクトを一度閉じてしまうと、その他プロパティの値が保持されません。 何か基本的なことを見落としているような気がするのですが、行き詰ってしまいました。 解る方いらっしゃいましたら、アドバイスお願いいたします。

  • VBAでオブジェクトのプロパティの値を変えたい

    エクセル2010のマクロの話なのですが、 添付画像にある、オブジェクトの「Value」というプロパティーの値を変更するための文法がわかりません。  PsyBcLbll.Value=13342353654 という感じで書いているんですが, たしか、 「変数が宣言されていない」 とかいうエラーが出てうまくいきませんでした。 一体、どう書けばいいんでしょうか?

  • オブジェクトやプロパティ、メソッドに付いて

    今、JavaScriptを覚えようとしてるのですが、オブジェクトから訳が分からなくなってきました。 ゲームに例えたら、自機がオブジェクトで、プロパティが自機のステータスで、 メソッドがいろいろな動作をさせる関数って感じでいいんでしょうか? それと、オブジェクトは下のようにメソッドやパラメータを使用しますが、 パラメータ=="値" って感じなのでしょうか?? オブジェクト名.メソッド名(パラメータ); オブジェクト名.プロパティ名="値"; よろしくご指導お願いします。

  • 【ExcelVBA】シートのCodeNameプロパティからオブジェクトを取得する方法

    いつも勉強させていただいてます。 業務でExcelVBAを使用していますが、ワークシートのCodeNameプロパティ値からワークシートオブジェクトを取得する方法はありますでしょうか。 以下、詳細です。 ・環境:Excel2003 ・概要    ワークシートのオブジェクト名:"shtFormat"    シート名:"フォーマット"  ガントチャートを作成するVBAなのですが、上記のシートをコピーして、実際に処理に使用するシートを作成します。  作成後も、ユーザフォームや別のデータ操作用ワークシートのイベントから操作するため、コピーしたシートを特定する情報を内部で保持しようと考えています。  そこで、CodeNameプロパティ値を保持しようと考えておりますが、CodeNameプロパティ値(文字列)からワークシート型のオブジェクトを取得する方法が分かりません。 ※ Nameプロパティはシート名を変更した際に使用できなくなり、断念しました。 ※Indexプロパティはシートの並び順によって値が変わるため、断念しました。 以上です。 宜しくお願い致します。

  • 既存オブジェクトに対するプロパティの追加

    既存オブジェクトに対してプロパティを追加したいと思っています。 具体的には(後述しますが)ファイル・フォルダオブジェクトに対してです。 (1)自分で作ったオブジェクトの場合 var huga = {}; huga.hoge = "123"; こうするだけで「hoge」プロパティを追加できますよね。 (2)一般的なオブジェクトの場合 Object.prototype.hoge = "123"; とすれば「hoge」プロパティを追加できますよね。 ここまでは知っていました。で、それを踏まえて同じように追加しようと、(1)(2)ともにためしてみたのですがうまくいきませんでした…。 文末のコードでは「item」の配列と、「newName」の配列を別に用意し処理しています。ただ、オブジェクトの意味合いからして、各独立に配列を用意するのはダサすぎます。で、item自体に「newName」プロパティを追加しようと思ったのですがこれがうまくいきませんでした。 ◎質問 ・この「item」オブジェクトにプロパティを追加することは出来るか ・出来ないのならなぜ出来ないのか。(拡張不可属性とかあるの?) ・出来るのならその方法 ※htaアプリなので、IEで動けばOKです。 以上、よろしくお願いします。 <html> <body> <input type="button" onclick="ファイル一覧取得()" value="ファイル一覧取得"> <div id="files"></div> <script> var folderItemsArray = []; var newFileNamesArray = []; // (2)で出来なかった例 // Object.prototype.newName = "123"; // FolderItem.prototype.newName = "123"; // Folder.prototype.newName = "123"; // Item.prototype.newName = "123"; function ファイル一覧取得() { folderItemsArray = []; newFileNamesArray = []; var FOLDER_PATH = "C:\\WINDOWS"; // ★ファイル・フォルダの一覧取得 var shell = new ActiveXObject("Shell.Application"); var folderItems = shell.NameSpace(FOLDER_PATH).Items(); var regOpt = "i"; for (var i = 0; i < folderItems.Count; i++) { // ↓このオブジェクトに「newName」を追加したい var item = folderItems.Item(i); if (!item.IsFolder) { newFileNamesArray.push("…"); // ↑別配列を操作している辺りがダサい // ↓本当はこんな感じにしたい。(1)で出来なかった例 // item.newName = "…"; folderItemsArray.push(item); } } 一覧表示(); } /** * ファイル一覧表示 */ function 一覧表示() { var body = ''; for (i = 0; i < folderItemsArray.length; i++) { var item = folderItemsArray[i]; body += "<tr>"; body += "<td>" + item.Size; body += "<td>" + item.Name; body += "<td>" + newFileNamesArray[i]; // ↑別配列を操作している辺りがダサい // ↓本当はこんな感じにしたい // tbodyStr += "<td>" + item.newName; } var table = '<table border="1" cellspacing="0">'; table += body; table += "</table>"; document.getElementById("files").innerHTML = table; } </script> </body> </html>

  • なぜiは変数の値が保持されるのに、wは保持されない

    なぜiは変数の値が保持されるのに、wは保持されないのでしょうか? Sub test() Dim w As Worksheet Dim i As Long i = 1 For Each w In Worksheets i = i + 1 Next MsgBox i MsgBox w.Name End Sub -------------------------------------- を行うと、 MsgBox i は表示されるのに、 MsgBox w.Name は、 「オブジェクト変数または With ブロック変数が設定されていません。」になります。 wはオブジェクト変数だから、 For Each ステートメントを抜けると値が破棄されてしまうのでしょうか? でもvbaのヘルプの 「For Each...Next ステートメントの使い方」 を見ても 「ステートメントを抜けるとオブジェクト変数なら値が破棄されます」 と記載されていません。

  • (VBA)ブックを開いている間、常に値を保持したい

    お世話になります。holmonと申します。 Excelブックを開いている間、値を常に保持しておきたいのですが、方法はありますか? 具体的にやりたいこと↓ 1.WorkBook_Openにてオブジェクト取得 2.上記を保持 2.ユーザーがExcel操作 3.ユーザーがExcel上のボタンを押す 4.イベント実行 4.のタイミングで、1.で取得した値を使いたいです。よろしくお願い致します。

  • ExcelVBAのオブジェクトとプロパティについて

    ネットだけで独学でVBAの勉強をしています。大雑把ですがオブジェクトとプロパティの認識はこんなものでよろしいのでしょうか。 オブジェクト=モノ(色々なものが集合して出来たモノ) プロパティ=モノが持っている動詞(例えば人間がオブジェクトとするなら、手を上げるなど、動作を言う)

  • 「戻る」ボタンで値の保持

    PHPやCGIなどで同じファイルにデータをポストした後に、ブラウザの「戻る」ボタンで戻ったときに「ページの有効期限切れ」になってしまうのですが、回避する方法はないでしょうか。 元のページとフィールドに入れた値を保持することはできないでしょうか。 他のファイルからポストしない限り値の保持は難しいのでしょうか。

    • 締切済み
    • PHP