VB2008Express Editionにてクラスをまとめる方法は

タグの編集
投稿者 ちょびっと  (社会人) 投稿日時 2011/4/25 17:33:20
このホームページを参考にして、ソフト作成を行っています。とっても、参考になっており、助かっています。クラスをいくつか作ってきましたが、これをまとめたいと思っています。調べ方が悪いのか、その方法がわかりません。どなたかご存知の方のご教授をお願いします。
「新しいプロジェクト」にて、「クラスライブラリ」を作り、ソリューションの下に、クラスライブラリが出来ましたが、その下に作成したクラスでは同レベルのプロジェクト内のフォームでは認識できません。
(同じものをプロジェクトの下に配置すると認識する)
プロジェクトで何らかの指定をする必要があるのか?どこかのプロパティーを変更するのか?
設定方法が不明です。単語の使い方に間違いがあるかも知れませんが、宜しく、お教え願います。
投稿者 るきお  (社会人) 投稿日時 2011/4/25 23:32:07
ソリューションの構成がよくわからないです。

ソリューションエクスプローラーにプロジェクトが2つ表示されていて、
1つはWindows フォーム アプリケーション。
もう1つがクラスライブラリ
という構成でしょうか?

それとも、プロジェクトはあくまで1つで、それはクラスライブラリ。
その中にクラスとフォームがある
という構成でしょうか?

>作成したクラスでは同レベルのプロジェクト内のフォームでは認識できません。
これは具体的にはどういう現象ですか?
「フォームを認識できません。」のようなエラーメッセージがでるのでしょうか?(多分、そのようなメッセージは見たことがないので違うとは思いますが)

まとめると、有効なアドバイスをするために足りない情報は以下2つだと思います。
1.プロジェクトの構成
2.やりたかったことと、そのために実際にやってみたこと、そして、期待に反して実際に起こったこと。(例:Class1のTestメソッドを使おうとしてForm1のLoadイベントでClass1.Testと書いたが、ビルドエラーが発生し「○○」というメッセージが表示された。→プログラムの話であれば実際の動かないプログラムをそのままコピー&貼り付けしていただくのが一番良いです。)
投稿者 るきお  (社会人) 投稿日時 2011/4/25 23:34:05
あと、追加で教えてください。
[ツール]メニューの[オプション]で、
「プロジェクトおよびソリューション」の設定で、「常にソリューションを表示」にチェックを入れてますか?
投稿者 ちよびっと  (社会人) 投稿日時 2011/4/26 06:07:58
うまく、表現できず、申し訳ありません。
1.プロジェクトの構成
ソリューション’R1’
 |-ClsLibrary
 |   |-My Project
 |   |-A1.vb
 |-R12
     |-My Project
     |-参照設定
     |-bin
     |-obj
     |-frmA.vb  (スタートプログラム)

もともと、R12のみで、R12の下にA1.vbはありました。この場合は問題がなかったのですが、
R12の下のクラスが増えてしまい、これらのクラスをまとめたいと考え、「新しいプロジェクト」にて、
ClsLibraryを作成し、そこにA1.vbを移しました。するとfrmA.vb内の
  Dim A11 As New A1
にて、A1部分で、以下のエラーが発生しました。     
  「型’A1’が定義されていません」

2.やりたかったこととは、「プロジェクト」→「クラスの追加」にて、作成したクラスしたクラスをまとめることです。ライブラリーに拘っているわけではありませんが。最終的にリンクできれば、良いのですが。

net前のソフトでは共通(いろんなところで使用可能な)関数、サブルーチンはモジュールにまとめていました。(これが正しいか判りませんが)
netに変わり、このような、プログラムを1つのクラスとして、1つ、1つのクラスで作成しています。
まだ、行っていませんが、ちょっと、視点を変えて、同じような区分?(例えば、文字処理用の関数)を1つのクラスにして、その中に関数、サブを作っていくほうが正しいのでしょうか?
【同じような区分】と言うのが、どのような区分?とも疑問になります。

プログラムは全てクラスとのことで、もっと、狭い表現(コントロール等?)をきちんと使えれば、適切な表現が出来ると思うのですが、ぼんやりした記憶(正確でない表現)で問合せを行い、申し訳ありません。









 
 

投稿者 shu  (社会人) 投稿日時 2011/4/26 07:50:08
流し読みしかしてませんが、多分名前空間の違いだと
思いますので、問題なければルート名前空間を同じにすればよいかと思います。
投稿者 (削除されました)  () 投稿日時 2011/4/26 10:39:43
(削除されました)
投稿者 とくま  (社会人) 投稿日時 2011/4/26 11:22:45
>  Dim A11 As New A1
>にて、A1部分で、以下のエラーが発生しました。
>  「型’A1’が定義されていません」
わざわざクラスライブラリに分けたんだから、
  Dim A11 As New ClsLibrary.A1
のままでいい気もするんだけど。

ルート名前空間を変えるなら、
[プロジェクト]-[プロパティ]-[アプリケーション]-[ルート名前空間]

省略するという意味なら、
[プロジェクト]-[プロパティ]-[参照]-[インポートされた名前空間]
で ClsLibrary という名前空間を Imports
してしまう方法もありそうです。 
投稿者 るきお  (社会人) 投稿日時 2011/4/27 00:03:19
R12側でClsLibraryに対して参照設定が必要です。
その方法はソリューションエクスプローラーでR12を右クリックして、「参照の追加」で「プロジェクト」タブからClsLibraryを選択。

プログラム上はプロジェクトが分かれたのでいきなりクラス名を書くだけではダメになり、
とくまさんのいうような方法をとります。

初級講座第51回「クラスライブラリの作成」でも説明しているのでよろしければ参考にしてください。
http://homepage1.nifty.com/rucio/main/dotnet/shokyu/standard51.htm
今回の件は「4.クラスライブラリのテスト」のあたりが該当します。
投稿者 ちよびっと  (社会人) 投稿日時 2011/4/27 11:12:00
ありがとうございました。
いつもは初級講座の目次をみながら、参考になるところを見つけ、何とか解決してきていたのですが。
今回は、私のさぼりで、お時間をおかけし、申し訳ありませんでした。初級講座は一応、勉強したのですが。