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

新たなプロパティを作成してそこに保持する方法でいいですか?
ほかのやり方がありますか?

このQ&Aに関連する最新のQ&A

A 回答 (4件)

ううん・・・



参照渡しの値渡しという言葉の意味が良く分かりません・・・
すいません。

内部クラスをプロパティに持つクラスを
値渡ししたい場合は、
その内部のクラスを自力でコピーしないとだめです。

所感で申し訳ございませんが、参照型、値型、参照渡し、値渡しがどういったものがきちんと掴めていないまま
クラスのプロパティのやり取りを行おうとしているように感じます。
少し学習の順序が違うのではないでしょうか?

確かに販売されているVB.netの書籍には、分かりやすい本はいくつかあります。
しかしそのいずれも、「オブジェクトのコピー」や「参照をコピーします」等といったキーワードが多数出てきます。

そしてそのキーワードの「本当の意味」が分からないままその本を熟読しても、「自分なりの解釈」で納得してしまうので、読み進めていくうちに「?」がいっぱいでてきて行き詰ってしまうのです。

何か必要にせまられてVB.netを選択しているのでしょうか?
時間的に余裕があり、「プログラムの勉強」をテーマとしているのならば、CやC++を基礎からやるのがお勧めです。

なぜなら、プログラミングの基礎が「本当の意味」で身につくからです。

VB.NETの開発をVisual Studioでやっていると思いますが、これは
「あまりにも便利すぎる」開発環境であると私は思っています。

VB.netは開発が楽ですし、あまりプログラムの内容を意識しなくても
「なんとなく」動く物ができてしまいます。

だから、rescue98さんのやろうとしているような、オブジェクトの概念必要な「オブジェクトのやり取り」や「プロパティ」の実装のところで躓いてしまうのです。

まずは、オブジェクトとはなにか?値型とは何か?参照とはなにか? という概念自体をしっかりと身に着ける必要があるのではないでしょうか?

CやC++は、メモリの扱いや参照、値型などの知識がないと
まともに動く物が作れません。
そういった意味で、VB.netを選択するのは危険だと思います。

CやC++を勉強しようとしたとき、
あまりにも「何を」していいのか分からず、聞く人もいないので、
簡単に勉強を始めることができる.NET関連の本を手に取ってしまうことは良くあります。

かといって、.NETが内部でどういう動きをしているのか?
を理解し、きちんと設計ができるようになるまでの時間は、
C++を知っている人とそうでない人との違いは雲泥の差があります。

rescue98さんが最初に立てた
「オブジェクトに値を保持させるにはプロパティに追加ですか?」
という質問から相当ずれてきてしまっているので、
一旦〆られて、

別途 「参照型、値型の概念を身に付けるお勧めの方法は?」などのトピックを新しく作られてみてはどうでしょうか?

老婆心からいろいろと記述してしまい申し訳ございません。
    • good
    • 0
この回答へのお礼

ありがとうございます。

Cは読みました。あのC言語を作った人の「プログラミング言語C」という本を読みました。

JAVAもEclipseにVisual Editorを入れてテーブルデータモデルを適用した表を作ってみました。

CはGUIがむずい。
JAVAはいろいろ別の仕組みを導入していかないと開発できない。
JUnitなど。

あとJAVAは継続した一環した開発が出来にくい環境だと判断しました。

そこでC#かVBかとなったわけですが、Visual C#かVisual BasicならVBを選ぶでしょう。

>VB.NETの開発をVisual Studioでやっていると思いますが、これは「あまりにも便利すぎる」開発環境であると私は思っています。

VBは簡単。誰でも出来る。
VBが出来るというとみんな口を揃えてそう言います。
・・・ならなぜ簡単なVBで開発しないの?と思ってしまいます。

今は勉強中なので基礎がわかってませんが、一通り本を読んで、VBを習得すると決めました。
ということで、本を読み進めたいと思います。

またよろしくお願いしますmm

お礼日時:2009/06/01 00:46

共有プロパティって、


静的メンバ、つまりSharedのことですよね。

値渡しと参照渡し、また静的メンバ の事をよく知らずに使ってしまうと特にマルチスレッドのプログラムを作る時にえらい事になるので。
今は使わないほうがいいでしょう。

まだ コピーできなくて うんうん悩む方がましです(笑)


>>プロパティ設定済みのオブジェクトをオブジェクト型に代入すると>>プロパティは付いてきますか?

ざっくり言うと、
そのプロパティが「値型(integetとかVB.netで用意されている型)」ならついてきますし、
「参照型(オブジェクト)」なら、参照のコピー。(つまり、ショートカットのコピー)
が渡されます。
 値型、参照型については調べてみて下さい。

どちらでコピーしても、
オブジェクトを代入した変数から、対象となるプロパティを見たら値が取れるはずです。

そもそも取れないというのは「オブジェクト参照がどうのこうの~」って例外がでるんですか?
それなら多分コーディングが間違ってると思うので、
ソースUPする方が早いかもしれません。

って、VB.net VS2005のつもりで話ししてますがあってますか?

とりあえず、
参考URL先に オブジェクトの中身を全部コピーする方法があるのでやってみてください。

参考URL:http://blogs.wankuma.com/jeanne/archive/2006/04/ …
    • good
    • 0
この回答へのお礼

ありがとうございます。

もうじき?Visual Studio 2010が出るので、
出たらすぐ使えるようにするために、Visual Studio 2005を先に本で勉強しています。

本にはこう書いていました。

オブジェクト参照はオブジェクトのアドレスのコピーが渡される。←これは参照渡しのことですね。
オブジェクト参照をプロシージャに渡し、元のオブジェクトに影響を与えないようにするには、オブジェクトのコピーを自分で作成します.
オブジェクトのコピーは、新しいオブジェクトを生成し、すべてのプロパティを正しく初期化する必要があります。←ここで?
オブジェクトのプロパティの数が多い場合は、コードがかなり必要になります。←????

以上のことが書いていました。
プロパティがあると初期化しないといけない、その数分コードを書かないといけない・・・と判断しました。
この3行目で?になったので、先に進めません・・・


本を何回か解読して、わかったかも知れません!

これは「参照渡しの値渡し」のことなのかもしれません。
ByRefキーワードの引数を()で囲むことで引数を値渡しにできます。

参照渡しの値渡しは、プロパティが引き継がれないということかなという結論に達しました。

参照渡しの値渡しは、プロパティは自力で入れる必要がある。ということで合っていますか?

お礼日時:2009/05/31 14:59

>>クラスからオブジェクトをインスタンス化させて実体を作るわけですよね。



そうです!

>>その実体に値を保持させるには、プロパティに代入すると、他のクラ>>スからその実体のプロパティに値を代入していくのかと思いました。

ですね。プロパティ経由で、クラスが持っている値を変更することができます。
しかし、そのオブジェクト(クラス)のプロパティは
「何の為に存在しているのか」をよく考えて外部に公開したり、しなかったりを考えて作ってください。

例えば、私自身のオブジェクト(クラス)は、以下のように表現できます。

''' ◆Unripe01のオブジェクトです。
Public Class Unripe01

'クラス内のみで使う変数です。(プロパティ用)
Private _Caption As String
Private _Name As String
Private _Age As Integer

''' コンストラクタ
Public Sub New()
_Name = "Unripe01"
_Age = 60
End Sub

'''*-- Unripe01の名前
Public ReadOnly Property Name() As String
Get
'他の人に名前の変更をされたら困るので、ReadOnly
Return _Name
End Get
End Property

'''*-- Unripe01の年齢
Public ReadOnly Property Age() As Integer
Get
'他の人に年齢の変更をされたら困るので、ReadOnly
Return Age
End Get
End Property

'''*-- Unripe01の説明
Public Property Caption() As String
Get
Return _Caption
End Get
Set(ByVal value As String)
'Unripe01の評判は他の人から判断されるのでSetできる。
_Caption = value
End Set
End Property

End Class

これを、ほかの人が操作する場合は、
''' メイン処理
Private Sub Main()

'コンストラクタを呼んで、Unripeのインスタンス化
Dim unripe As New Unripe01()

'Unripe01の評価を下します。
unripe.Caption = "この人の説明は分かりづらいです。"

End Sub

こんな感じで。

>>クラスをパブリックにしても他のクラスからアクセスできるのですね。

これはプロパティの誤り?かと思いますが、
VB.netではクラスは元々パブリックです。Privateにする為には、Publicなクラスの内部クラスとして宣言する必要があります。

が、最初はそういうクラス設計をしないように、クラスを組み立てて言ってください。

上記例で言えば、Unripe01クラスのプロパティに、Unripe02さんのオブジェクトやプロパティがあったらUnripe01オブジェクトの存在意義が分からなくなってしまいますよね。

「1オブジェクトは、一つの何かを表す。」
という事をいつも前提に置いてください。


>>オブジェクトをコピーするとプロパティは初期化されるそうです>>が、プロパティ設定を維持したままオブジェクトはコピーできないん>>ですか?

結論から言うと、コピーできます。

おっしゃっているオブジェクトのコピーについては、
「値渡し」と「参照渡し」という概念や、「シャローコピー」「ディープコピー」ついて、検索したら色々とサイトが出てくると思いますが、奥が深いです。

「値渡し」と「参照渡し」については
以下のようなイメージです。
(1)Windowsでテキストファイルを作ってください。
(2)そのフォルダのショートカットを作ってください。
(3) (1)のファイルをコピーしてください。(コピー~ファイル名というのができる)

(1)を開いても、(2)を開いても、元々の(1)を開きますよね?
そして(3)は値渡しです。

乱暴に説明してしまうと、その実態オブジェクト(テキストファイル)へのショートカットを見るか、直接コピーするのかが「値渡し」「参照渡し」の違いです。

「コピーできない」と心配しているのは、元々のファイルを消してしまうと、(2)では開けないですよね。

イメージなので、かなり乱暴に説明しているので、、、申し訳ないですが、実際の動きはもう少し違います。

あまり考えすぎると、顔がこわばってしまうので、のんびり勉強してください。
    • good
    • 0
この回答へのお礼

ありがとうございます。
値渡しでも参照渡しでもプロパティは保持されてオブジェクトに付いてくるのですね。

最後に質問ですが、
プロパティ設定済みのオブジェクトをオブジェクト型に代入するとプロパティは付いてきますか?

オブジェクトに代入したらプロパティがくっ付いてこないので、共有プロパティを使うのかなと考えています。

「オブジェクトにオブジェクトを代入すること」と「コピー(値渡し・参照渡し)」は同じことをただ言い方を変えただけなような気がしてきました。

そうすると、共有プロパティの使い道がない・・

プロパティどころか共有プロパティの使いどころすらわからなくなってきました。

複雑ですね。ちょっと考えます・・・

お礼日時:2009/05/29 13:46

はじめまして。



オブジェクトとは、クラスの作成を検討しているのでしょうか?
クラス自身に値を保持させる方法という解釈で、以下ご回答します。

通常、クラスに値を保持させるには
クラス自身の変数、またはプロパティを宣言します。

Privateなフィールドであれば、
クラス変数にしてもプロパティにしても問題がないように思います。

Publicで、外部に公開する場合も、
プロパティを作成したり、
「Public A As String」のように宣言しても使用可能です。

でも、プロパティを使っておくと、
外部に公開されている、機能の実装の修飾であると明示化できるので、
プロパティを推奨します。

稚拙な回答ですが、参考になればいいかと・・・
    • good
    • 0
この回答へのお礼

ありがとうございます。

クラスからオブジェクトをインスタンス化させて実体を作るわけですよね。
その実体に値を保持させるには、プロパティに代入すると、他のクラスからその実体のプロパティに値を代入していくのかと思いました。

クラスをパブリックにしても他のクラスからアクセスできるのですね。
参考になりました。

オブジェクトをコピーするとプロパティは初期化されるそうですが、プロパティ設定を維持したままオブジェクトはコピーできないんですか?
プロパティ指向型言語がよくわかりません・・・

お礼日時:2009/05/28 17:13

このQ&Aに関連する人気のQ&A

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています

このQ&Aを見た人が検索しているワード

このQ&Aと関連する良く見られている質問

QC#「オブジェクト参照が必要です」(初心者)

Visual C# 2008を学習中なんですが、とりあえず何か作ってみようと思って、パラパラマンガに挑戦してみました。
Form1にpictureBox1を作り、waitを入れてイメージを書き換えるという単純なものです。
ところが実行しようと思ったら、「静的でないフィールド、メソッド、またはプロパティ’WindowsFormApplication1.Form1.pictureBox1’でオブジェクト参照が必要です」というエラーが出ます。その際のフォーカスは、main()内の
Form1.pictureBox1.image = Image.FromFile("motion1.png");
”Form1.pictureBox1”に当てられています。

何が原因と考えられるでしょうか。
もし情報不足であればご指摘いただくか、あるいはこの目的においてやらなければいけないこと、を大雑把に教えていただくだけでも幸いです。
よろしくお願いします。

Aベストアンサー

main()内に記述されているとのことですので、たぶん、
Form1.pictureBox1.Image=Image.FromFile("motion1.png");
Application.Run(new Form1());
と書いているのではないでしょうか?

連載 改訂版 C#入門 第3章 クラスとインスタンス
http://www.atmarkit.co.jp/fdotnet/csharp_abc2/csabc2_003/cs2_003_01.html#cs0302

ここであるように、オブジェクト指向にはクラスとインスタンスという概念があります。
今のコードでは、Form1クラスを操作しようとしているのでそのようなエラーが出ます。

具体的な解決方法としては、PictureBoxに初期画像を設定する処理をForm1のコンストラクタでやるのがいいと思います。
その際、redfox63さんがおっしゃられるように
this.pictureBox1
と記述することが必要です。(thisは自分自身のインスタンスを指します)

後は、Windowsフォームで一定間隔での処理をするための「Timerコンポーネント」について調べてみたらいいと思います。

タイマにより一定時間間隔で処理を行うには?(Windowsタイマ編)
http://www.atmarkit.co.jp/fdotnet/dotnettips/372formstimer/formstimer.html

MSDNライブラリ Timerクラス
http://msdn.microsoft.com/ja-jp/library/system.windows.forms.timer.aspx

参考URL:http://www.atmarkit.co.jp/fdotnet/csharp_abc2/index/

main()内に記述されているとのことですので、たぶん、
Form1.pictureBox1.Image=Image.FromFile("motion1.png");
Application.Run(new Form1());
と書いているのではないでしょうか?

連載 改訂版 C#入門 第3章 クラスとインスタンス
http://www.atmarkit.co.jp/fdotnet/csharp_abc2/csabc2_003/cs2_003_01.html#cs0302

ここであるように、オブジェクト指向にはクラスとインスタンスという概念があります。
今のコードでは、Form1クラスを操作しようとしているのでそのようなエラーが出ます。

具...続きを読む

QForm間の値の渡し方

1つのForm上のコマンドボタンで別のFormを表示、そこで変数に値を入れ、そのFormを閉じ、元のFormでその変数を使いたいのですが、どうもうまくいきません。
実施したやり方は、一方のFormの宣言領域で、”Public abc As String”を宣言、両方のFormの(変数に値を入れた方と変数を使う方の)プロシージャーの宣言では引数として(abc As String)と記述しました。
因みに、両プロシージャーともイベントプロシージャーです。何か基本的なことができていないのだとは思いますが、どなたか教えていただけませんか?よろしくお願いします。

Aベストアンサー

すでに何件か回答があがっていますので、少し変わった方法をご参考までに。

あまり使われませんが、Formにはtagというプロパティがあります。
これは「文字列形式であれば何でも格納できる」という、上手く使えば便利なプロパティです。

FormAからFormBを呼び出し、FormBで変更した値をFormA.tagにセットします。
ここでFormBをUnloadしてもFormA.tagの値は影響を受けないので自由に使えます。

複数の値を呼び出し元に戻してやる場合に、区切り文字(カンマなど)で連結した文字列をtagに格納し、呼び出し元で区切り文字でsplitして、複数の値を受け渡すという手法をよく使っています。

QDataGridViewで指定したセルの値を取得

こんにちは。

VB2008のDataGridViewで指定したセルの値を取得をする方法がわかりません。
どなたか教えてください。

Aベストアンサー

こんばんは.

 Dim Data As String
 Data = Me.DataGridView(0, 2).Value
 MsgBox(Data)

みたいな感じで取れないですかね???

QCloseとDisposeの違い

みなさまこんばんわです。よろしくお願い申し上げます。

VB.NET 2008でコーディングしています。
CloseとDisposeの違いについて教えていただきたいのです。

これらのメソッドは、開いたファイルを閉じるときなどにも使いますが、今回お尋ねするのは、フォームを閉じるとき、しかも、自ら呼び出すとき(Me.Close() と、Me.Dispose() )のみに限ったこととしてお話しさせていただきます。

たとえば、ShowDialog() で呼び出したフォームは、そのフォーム内でMe.Close() しても、プロセスは残り、たとえば、タイマーコントロールのイベントに記述していますと、それは実行され続けます。

これを防ぐために、Me.Dispose() を使います。すると、きれいにプロセスは終了し、イベントは発生しない模様です。

そこで、「フォームを閉じる」意味のMe.Close() をすべてMe.Dispose() に変えてしまいました。確実にプロセスを破棄出来ると思ったからです。Webで調べると、違いは「再利用できる、できないの違い」という答えがありましたが、それはきっと、ファイルやオブジェクトのことで、フォームの場合は、再びShowまたはShowDialogで表示させることは可能でしたので、特に問題は感じていませんでした。

ところが、アプリケーション設定で、「最後のフォームを閉じるとき」にアプリケーションがシャットダウンする設定になってるのに、シャットダウンしてくれないことが起こりました。調べてみると、Me.Dispose() が原因。Me.Close() に変えるとうまくいきました。

わけわからなくなってきました。。。

ちなみに、その残ったフォームは、スタートアップフォームであり、別のフォームからShowまたはShowDialogメソッドで呼び出したものではありません。

ここで4つの仮説を立ててみました。

1. ShowDialogで呼び出したフォームは、Me.Dispose()、Showで呼び出した、あるいは、スタートアップフォームは、Me.Close() すれば破棄できる

2. ShowDialogで呼び出したフォームは、Me.Dispose()、スタートアップフォームは、Me.Close()、Showで呼び出したフォームは、どちらでも、破棄できる

3. 呼び出し方ではなく、別の要因が存在する

4. 併記する必要がある場合がある

Me.Close()
Me.Dispose()

または、

Me.Dispose()
Me.Close()



どれが正しいのでしょうか?どなたがご存じの方がいらっしゃいましたら、ご教授いただけませんでしょうか? どうぞよろしくお願い申し上げます。ありがとうございました。

みなさまこんばんわです。よろしくお願い申し上げます。

VB.NET 2008でコーディングしています。
CloseとDisposeの違いについて教えていただきたいのです。

これらのメソッドは、開いたファイルを閉じるときなどにも使いますが、今回お尋ねするのは、フォームを閉じるとき、しかも、自ら呼び出すとき(Me.Close() と、Me.Dispose() )のみに限ったこととしてお話しさせていただきます。

たとえば、ShowDialog() で呼び出したフォームは、そのフォーム内でMe.Close() しても、プロセスは残り、たとえば、...続きを読む

Aベストアンサー

Me.Close()
Me.Dispose()
は根本的に違うものです。

formについて、Close()メソッドはフォームの表示を終了させるメソッドです。

ほかのクラスも同様。すべてのDispose()メソッドについて、これはインスタンスの破棄を明示的に行うものです。

>再利用できる、できないの違い

Dispose()はインスタンスが破棄されるため、再びコンストラクタを用いて、インスタンスを生成しないいけません。

一方Close()はインスタンスが残っているので、それを利用することができます。

>1. ところが、アプリケーション設定で、「最後のフォームを閉じるとき」にアプリケーションがシャットダウンする設定になってるのに、シャットダウンしてくれないことが起こりました。調べてみると、Me.Dispose() が原因。
Me.Close() に変えるとうまくいきました。

通常はどちらでもうまくいきます。

>2. ShowDialogで呼び出したフォームは、Me.Dispose()、スタートアップフォームは、Me.Close()、Showで呼び出したフォームは、どちらでも、破棄できる

ShowDialogの場合は、メソッド内部で、ハンドルが破棄されているため、Close()メソッドの際にDispose()メソッドが呼び出されます。

>3. 呼び出し方ではなく、別の要因が存在する

そう思います。

>4. 併記する必要がある場合がある

インスタンスを明示的に破棄したほうがよい場合は多く存在します。
Disposeが使えるメンバはIDisposableをインターフェースとして持っているメンバです。
これらのメンバは、外部とのやり取りを行うものが多くあります。
たとえばSQLClientに含まれるようなメンバです。

外部とのコネクションを確実に破棄を保障してほしいなどという場合がありますよね、このようなときに使用します。

Using構文を使用するのとまったく同じ理由になります。
正確にはUsing構文を使用できるメンバには条件があります、IDisposableをインターフェースとして持っているメンバに限るというものです。

ほかにもガーベージコレクタによるファイナライズを伴うかどうかという違いがあります。
Disposeの場合はファイナライズが同時に行われるため、使用していたメモリ空間を開放することができます。

上記のような理由により、
Me.Close()
Me.Dispose()
は両方書いたほうがよいと思います。

蛇足ですが、
Me.Dispose()
Me.Close()
はエラーになります。
Me.Dispose()により、Me本体(インスタンス)は削除されてしまいます。
存在しないMeに対してCloseメソッドを要求することはできないためです。

Me.Close()
Me.Dispose()
は根本的に違うものです。

formについて、Close()メソッドはフォームの表示を終了させるメソッドです。

ほかのクラスも同様。すべてのDispose()メソッドについて、これはインスタンスの破棄を明示的に行うものです。

>再利用できる、できないの違い

Dispose()はインスタンスが破棄されるため、再びコンストラクタを用いて、インスタンスを生成しないいけません。

一方Close()はインスタンスが残っているので、それを利用することができます。

>1. ところが、アプリ...続きを読む

QC#にて別クラスの関数を使いたい

C#にて、別クラスの関数を使用する方法を教えてほしいです。

下記のような、構造体を受け取るメソッドを作りました。

*****************************
private struct MyPoint
{
public int x;
public int y;
}

private void proc1(MyPoint pt)
{
MessageBox.Show("座標:" ; pt.x + "," + pt.y + "実行結果");
}

private void button1_Click(object sender ,System.EventArgs e)
{

MyPoint pt;
pt.x = 10;
pt.y = 20;
proc(pt);
}
*****************************

別のフォームのクラスから、proc1を呼び出したいのですが、やり方がわかりません。
どうか、教えてください。

Aベストアンサー

同じ定義をしたとしても別の名前空間に書いた構造体は同一とはみなされません。

呼び出し先クラスでの構造体を private では無く、public で宣言して下さい。

呼び出し元では、

MyClass.MyPoint pt;

のようにして実体を作ります。

QVB.NET getとsetの概念がわかりません。

GetとSetがどういう働き・意味をもっているのか理解できていません。

たとえばSpecialTextBoxというクラスがあったとします。
***************************************************************
Imports System.Web.UI.MobileControls

Partial Class SpecialTextBox
Inherits System.Web.UI.MobileControls.MobileUserControl

Public Property Item() As SelectionList

Get
Return Me.CheckBox
End Get
Private Set(ByVal value As SelectionList)
Me.CheckBox = value
End Set

End Property

End Class
****************************************************************

ここでのGet Setはどういう動き・働きをしているんでしょうか?
わかる方がいたらご助言お願いいたします。
(サンプルソースなどがあれば理解しやすいかもしれません。。)

GetとSetがどういう働き・意味をもっているのか理解できていません。

たとえばSpecialTextBoxというクラスがあったとします。
***************************************************************
Imports System.Web.UI.MobileControls

Partial Class SpecialTextBox
Inherits System.Web.UI.MobileControls.MobileUserControl

Public Property Item() As SelectionList

Get
Return Me.CheckBox
End Get
Private Set(ByVal value As Sele...続きを読む

Aベストアンサー

getはそのインスタンスから値を取り出します。
setはそのインスタンスに値を設定します。
あなたの例だと、GetはCheckBoxの値を取り出します。
SetはCheckBoxに指定した値を設定します。

QC#で共有変数の定義をするには

C#で共有変数の定義をするには、どうしたらよいでしょうか。具体的には、起動パラメータで、任意の文字列(3~4バイト)を渡して、C#アプリケーションを、起動し、プログラムの任意の場所で、そのパラメータを参照したいと考えています。起動パラメータの受け取りは、できるのですが、そのパラメータを、プログラムのどこからも参照できる領域(ここの定義方法が不明)に格納するには、どうしたらよいでしょうか。(2重起動を許す前提です。実行時に1つの目のプログラムにはパラメータ"XYZ"を渡し、2つ目のプログラムを起動時にはパラメータ"ABCD"を渡し、その値により、プログラムの動作を制御したいと思っています)
Windows-xp visual-studio2008 C#でwindowsアプリケーションを作成しています。

Aベストアンサー

namespace test1
{
  static class Program
  {
    /// <summary>
    /// アプリケーションのメイン エントリ ポイントです。
    /// </summary>
    [STAThread]
    static void Main(string[] args)
    {
      if (args.Length > 0)
      {
        strArg = args[0];
      }
      Application.EnableVisualStyles();
      Application.SetCompatibleTextRenderingDefault(false);
      Application.Run(new Form1());
    }
    // ここに記述
    static public string strArg = null;
  }
}

メインクラスのメンバーとしてスコープが有効な場所に記述します

namespace test1
{
  static class Program
  {
    /// <summary>
    /// アプリケーションのメイン エントリ ポイントです。
    /// </summary>
    [STAThread]
    static void Main(string[] args)
    {
      if (args.Length > 0)
      {
        strArg = args[0];
      }
      Application.EnableVisualStyles();
      Application.SetCompatibleTextRenderingDefault(false);
      Application.Run(n...続きを読む

QDataTableに特定のフィールドが存在するかどうか調べるには?

DataTableに登録されているフィールドに、特定のフィールドが存在しているかどうか調べるには、どのようにすればよいでしょうか?

dtTable.Columns.Add("TEST1")
dtTable.Columns.Add("TEST2")

dtTableにTEST1とTEST2のフィールドが登録されていたとして、

Dim tmp As String = dtTable.Rows(0).Item("TEST3"),ToString

TEST3のフィールド名で値を取得しようとすると、TEST3の列が登録されていない為、エラーとなります。

そこで、事前にTEST3というフィールドが、DataTableに存在するかどうか調べたいのです。
(ハッシュテーブルのContainsKeyメソッド等のようなものを求めています)
お分かりになる方がいましたら、宜しくお願いします。

Aベストアンサー

DataColumnCollection.Contains メソッド
http://msdn2.microsoft.com/ja-jp/library/system.data.datacolumncollection.contains(VS.80).aspx
を使用すればよいと思います。

ちなみに、DataTable.Columns が DatacolumnCollection クラスです。

QVB.NETのDataGridで、選択行の特定の列の内容を取得したい

タイトルにあるとおり、DataGridを使用している場合、実行時に選択された行の特定の列の内容を取得するにはどのようにすればよいのでしょうか?

DataGridは複雑で、まだよくわかっていません。
よろしくお願いします。

Aベストアンサー

選択している行番号は、dataGrid1.CurrentRowIndexでわかります。
行、列を指定して各セルにアクセスするには、
dataGrid1(行番号,列番号)でいいので
dataGrid1(dataGrid1.CurrentRowIndex,列番号)
で選択されている行の特定の列の内容を取得できます。
註:番号は、0始まり

Qvb.netで画面のコントロールId名を変数で動的に制御し処理する方法

以下のような処理がしたいです。
実現方法をご存知でしたらご教授下さい。

画面のコントロールText1~Text3があります。
For~Nextでこのコントロールに値をセットしたいです。

For i = 1 To 3
  Texti.Text = i
  ※このiのTextの後ろのiの部分を1~3と動的に変更し、各Textに値を設定したいです。
Next

Aベストアンサー

こんにちは、webでは、findcontrolを使うみたいです。

いかに、参考URLから、引用すると
***********************************
Dim L, U, i As Integer
Dim tx As System.Web.UI.WebControls.TextBox
L = LBound(dat)
U = UBound(dat)
For i = L To U
'コントロール名を探し出す
tx = FindControl("TextBox" & CStr(i))
'見つかったコントロールのTextプロパティに代入
tx.Text = dat(i)
Next

******************引用終わり*******
このようにすると良いみたいです。
asp findcontrolで、検索すると、
結構ヒットするみたいです。

参考URL:http://natchan-develop.seesaa.net/


このQ&Aを見た人がよく見るQ&A

人気Q&Aランキング

おすすめ情報