• 締切済み

VBのクラスについて質問です。

VBのクラスについて質問です。 Dicitionaryに格納した値を取得するとき、下記の2つの方法があると思います。 (どちらの方法でも同じ値が取得されるかと思います。)  (1)オブジェクト("xxx")  (2)オブジェクト.Item("xxx") 本題ですが、独自のクラスに(1)のメソッドを実装するためにはどうすればよいでしょうか?

みんなの回答

  • redfox63
  • ベストアンサー率71% (1325/1856)
回答No.2

VB6ですと 『Microsoft Scripting Runtime』を参照設定しておいて 新規のクラスを追加 冒頭の宣言部分に Dim oDic as Dictionaly Class1のInitializeイベントで Private Sub Class1_Initialize()   Set oDic = New Dictionaly End Sub プロパティ Itemを生成 Public Property Get Item( sKey as String )   Item = oDic( sKey ) End Property 追加メソッド Addを生成 Public Sub Add( sKey as String, newVal )   oDic.Add sKey, newVal End Sub として AddまたはItemのコード部分にカーソルをおいて VBのメニューで ツール > プロシージャの属性 を実行 名前を Itemに変更 『詳細(V)』を押して プロシージャID(I)を『(既定値)』に変更 といった具合で出来そうです 重複データ(キー)などがあった場合などのエラー処理も実装する必要があると思います ・・・

全文を見る
すると、全ての回答が全文表示されます。
回答No.1

VB って、VBA や VB6 じゃなくて VB.NET のことでよいですか? Visual Studio 2008 の VB で試してみましたが、↓のようにすればよいみたいです。 Public Class Class1 Private mdic As Dictionary(Of String, String) Public Sub New() mdic = New Dictionary(Of String, String) End Sub Public Sub Add(ByVal strKey As String, ByVal strValue As String) mdic.Add(strKey, strValue) End Sub Default Public ReadOnly Property Item(ByVal strKey As String) As String Get Item = mdic(strKey) End Get End Property End Class ------------------------------------------------------------------------- Public Class Form1 Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click Dim c1 As New Class1 c1.Add("Key1", "Test1") Debug.Print(c1("Key1")) End Sub End Class

sanbosan
質問者

お礼

ご回答ありがとうございます。 言葉足らずで申し訳ありません VB.NETではなく、VB6でのやり方を探しております。

全文を見る
すると、全ての回答が全文表示されます。

関連するQ&A

  • html内の値を取得

    下記開発環境で開発を行っています。 VS2005 vb.net あるString型の変数に値が入っています。 その値は下記のようなhtmlです。 <html> ←ここから <head></head> <body> <div id='test1'> OK </div> </body></html> ←ここまで 実装したいことは <div id='test1'> で囲まれた”OK”という値を取得することです。 文字列をHtmlDocumentに格納するとGetAttributeメソッドで取得できるのらしいですが、 方法がわかりません。←すみません、表現がただしくないかもしれません。 どなたかご存知の方ご教授お願い致します。

  • VBは、コピペを繰り返して規定のオブジェクトをいじっていくもの?

    VBは、コピペを繰り返して規定のオブジェクトをいじっていくもの? VBはクラスライブラリを、コピペを繰り返して規定のオブジェクトをいじっていくものですか? VBからフォームアプリケーションの作成を選ぶと、Form1というウィンドウが1つ生成されます。 これを規定のオブジェクトと呼んでいます。 その時点で、複数のオブジェクトがすでに存在しており、隠れて存在しています。 謎1)既に生成されている規定のオブジェクトはどうやって確認できる???    どんなオブジェクトが存在しているのか知りたい!!! オブジェクトに独自の値を持たせるには、インスタンス(実体化)して、 そのオブジェクトに値を入れていくのが、Visual Basicのプログラミング方法です。 どんな隠れオブジェクトが存在するかは、クラスライブラリを見て、使ってくれという感じです。 それでクラスライブラリには、(宣言)と(使用法)が載っていますが、 使うには、それに記載されているアセンブリのXXX.dllをimportsしてから、使用法のコードをコピペします。 ただ、(宣言)はなにに使うのか謎のままですが、 こうしてコピペを繰り返して規定のオブジェクトをいじっていく解釈で合っていますか? 謎2)クラスライブラリの宣言はいつコピペする??? ここでいう解釈は、Visual Studio 2005での開発としての解釈です。

  • VBのクラスの利用

    VBの初心者ですが、FormにTextBoxとコマンドボタンを配置して、ボタンクリックでTextBoxに"ABC"と表示させるものをクラスを使ってやろうと思っています。WriteAクラスを作り、その中にkakikomiメソッドを作り、引数を(TextA AS TextBox)とし、メソッド内部でTextA.Text="ABC"としました。 コマンドボタンクリックメソッド内部で、  Dim obj As WriteA  Set obj=New WriteA  obj.kakikomi(Text1)//Text1はTextBoxのオブジェクト名 とすると、[引数の型が違う]でコンパイル出来ません。どうしたら良いのでしょうか?

  • 抽象クラスのオブジェクトを生成できない理由は?

    ・抽象クラスは、なぜ(オーバーライドしないと)オブジェクトを生成できないのでしょうか? ・インタフェースみたいに、抽象メソッドしか宣言することができないなら話は分かるのですが… ・抽象メソッドでない普通のメソッドを実装できるのなら、オブジェクトを生成してくれても良いと思うのですが… ・そういう問題ではない?

    • ベストアンサー
    • Java
  • サブクラス型オブジェクトをスーパークラス方に代入

    ある所で下記のような継承についての記述をみつけました。 ----------------------------------------------------------------------------- 継承の目的は、あるクラスで実装したメソッドなどの機能を利用して、 さらに実装を追加する差分コーディングです。 一つのクラスから複数のサブクラスを作ることも良くあります。 このような時、それらのサブクラス型オブジェクトの参照を代入できる変数として、 スーパークラス型変数を使うことがしばしばあります。 ----------------------------------------------------------------------------- サブクラス型オブジェクトの参照を代入できる変数として、 スーパークラス型変数を使うことがある、と いうのはどういった場合に使うのでしょうか。 よろしくお願いします。

    • ベストアンサー
    • Java
  • VB6のコードをC#にしたい

    C#はこちらでよかったでしょうか。。カテゴリ違いだったらすみません。 現在、VB6にて書かれているコードを、C#にて置き換える事になりました。 しかし私はまともなオブジェクト指向の言語で組むのも初めてなら、C系の言語で組むのも初めてで、そこでどうすればいいのか困っています。 VB6で sub aa(i as integer)      dim obj as object   call bb(obj,i)   call obj.run()    end sub    sub bb(byref pobj as object,i as integer)      select case i    case 1:     pobj = new obj1    case 2:     pobj = new obj2   end select    end sub    といったようなコードがあります。obj1とobj2はVBのクラスなのですが、メソッドはどちらも同じrunというものが用意されているとします。 ようは引数の値によって、メソッドやプロパティの形は同じだけれど、メソッドの中身が違うクラスをもらって、そのもらったクラスのメソッドを実行したいわけです。 しかしC#でまったく等価のソースをかくと、当然ながらobjはただのobject形なので、そんなメソッドはないとおこられてしまいます。VB6の場合、そのあたりが厳密でないので許されていたのですが。。。 こういった場合、どのようにソースをかけばいいのでしょうか? やはりobj1,obj2のクラスの方に工夫しないといけないでしょうか? 実はこのオブジェクトを用意しているのが別チームの為、その場合こうしてくれと提案しなくてはなりません。もしそれがなくても可能であればそれにこした事はないのですが。。。 いちおうもらったクラスのタイプをしらべて、それごとにコードをかくという方法は思いついたのですが、それだとobj1、obj2にあたるクラス数が実は種類がたくさんあり、そこだけならまだしも、他にも同じようなコードをたくさんかかなくてはいけなくなってしまいます。 もう少しスマートにするにはどのようにすればいいでしょうか? こういうクラス構成にすれば、とか教えていただければ助かります。

  • 実行時に確定するメソッドを呼び出す方法について

    invoke()メソッドや、Methodクラスを 使用するなど。以前に小耳にはさんだ。記憶があります。 以下の3つの引数から 動的に該当メソッドを呼び出す。 処理を実装コードがすぐだせる方がいると 助かります。 Object foo(Object obj, String methodName, Collection param) (1)該当オブジェクト getClass()などで、該当クラスを動的に  特定。 (2)、(1)が保有しているメソッドのうち、 発行したいメソッドの名前 (3) parmには1要素ごとに2要素のObject[]型を   を格納して、 Object[0]の要素にかんしてはが引数の型についての完全修飾クラス名をあらわすString型。   Object[1]については実際に入っている値。 上記3つの引数をうけとって内部で getClass()とかつかって 必要な情報はすべて実行時に動的に 取得して objの該当オブジェクトを 発行し、foo()メソッド自体の 返却値はそのメソッドの返却値とする という ロジックの実装のサンプルがあると。 とても、うれしいです。 じゃ、void型が返却の時どうすんねん。 とか、staticの時どうすんねん。 とか、その変のアイデア持ってる 人がいるととてもうれしい。 以上

    • ベストアンサー
    • Java
  • クラスのスコープ範囲

    再度お世話になります。 C++のクラスについての質問ですが、 別ファイル(別のDLL)に定義されているメンバ関数を利用したいのですが、 どのように外部宣言すればよろしいのでしょうか。 どうぞ宜しくお願いします。 例) A.dll あるクラス内に格納されている値を取得する為に、 Get_XXXというメンバ関数が定義されている。 B.dll こちらからその値をそのメンバ関数を利用して取得する。

  • VB6構造体をVB2008クラスで行う場合

    何方かの質問「VB6構造体をVB2008クラスで行う場合」 の回答プログラムにて参考とさせて頂きましたが 申し訳ありません、初心者しにて・・・・・教えてください。 値を「登録、参照部分」のクラス(抜粋) Public Class Program   Public Shared Sub Main()    (省略)   End Sub End Class 上記部分なのですが (1)Sharedを使用する訳はなんでしょうか?(省いても問題ありませんか?) (2)登録、参照部分のクラスPublic Shared Sub Main()を「登録のメソッド」と「参照のメソッド」に   分けたいのですがどうしてもうまくいきません。   何方か御教授願えないでしょうか? よろしくお願いします。 「以下何方かの質問の回答プログラム」 ■クラス+コレクションクラス Public Class Group   Public MainID As Integer   Public SubID As Integer   Public Value1 As Integer   Public Value2 As Integer End Class Public Class GroupCollection : Inherits System.Collections.Generic.Dictionary(Of Integer, Group)   Public Shadows Sub Add(ByVal Item As Group)     MyBase.Add(Item.SubID, Item)   End Sub End Class Public Class Program   Public Shared Sub Main()     Dim DataDict As New GroupCollection     Dim NewGroup As New Group     NewGroup.MainID = 1     NewGroup.SubID = 101     NewGroup.Value1 = 123     NewGroup.Value2 = 234     DataDict.Add(NewGroup)     Console.WriteLine(DataDict.Item(101).Value2) ' 出力 234   End Sub End Class

  • VB初心者なのでわかりづらい説明になってしまっていますが、宜しくお願い

    VB初心者なのでわかりづらい説明になってしまっていますが、宜しくお願いいたします。 ソリューションに含まれる全クラスのメソッド一覧を取得したいと考えています。 考えている処理は以下の通りです。 For i As Integer = 1 To プロジェクト数   For j As Integer = 1 To クラス数     ' クラスオブジェクトの取得     Dim typ As Type = GetType(プロジェクト名.クラス名) ※     ' クラスが持つメソッドの取得     Dim methods As MethodInfo() = typ.GetMethods()     ' 出力処理   Next Next ソリューションの例 Solution   ├Project1   │  ├Class1_1   │  └Class1_2   ├Project2   │  ├Class2_1   │  ├Class2_2   │  └Class2_3   └Project3      └Class3_1 ただ、ソリューションに含まれるプロジェクトの数、プロジェクトに含まれるクラスの数 の取得方法とプロジェクトに含まれているクラス名の取得方法がわかりません。 よろしければ、教えていただけないでしょうか。 また、他に良い方法があれば教えていただけないでしょうか。 宜しくお願いいたします。 環境はVB2008です。

このQ&Aのポイント
  • 私は職場に片思いしている年上の男性と距離が縮まったと思っていたが、自分のアプローチがし過ぎたため素っ気なく接してしまった
  • 男性は話しかけてきたり私の様子を伺っているように見えるが、二人きりを避けられているようにも感じる
  • 私の素っ気ない態度が原因なのか、それとも男性が私からアプローチされることを避けているのか、皆さんの意見を聞きたい
回答を見る