• ベストアンサー

System::Object へのmyClassの代入

お世話になっております。 表題の件について困っております。お分かりになる方、教えてください。 やりたいことは、Windowsフォームアプリケーションで、ボタンやListBoxなどのコントローラにあるtagプロパティに自分で作ったクラス(MY_CLASS)のオブジェクトを代入したいのですが、やり方がわかりません。 オブジェクトクラスには何でも代入できると思っていたので普通に代入しようとるすと、 'MY_CLASS' から 'System::Object ^' に変換できません。 と怒られます。 どうすれば良いのかご教授ください。 お願いいたします。

質問者が選んだベストアンサー

  • ベストアンサー
回答No.2

MY_CLASS^ myc = gcnew MY_CLASS(); button1->tag = myc;

chaw-chaw
質問者

お礼

できました。 ただ、今回はButtonクラスを継承してtagの代わりに新しい変数を追加するほうが分かりやすそうなので、このようにしました。 教えて頂いて情報はいずれ役に立ちそうです。ありがとうございました!

その他の回答 (2)

回答No.3

どうもマネージドクラスとして宣言すればSystem::Objectの派生クラスとして扱われるっぽいです。 よってあえて >ref class MY_CLASS : System::Object{ とする必要性はないようです。

chaw-chaw
質問者

お礼

さらなる情報ありがとうございます。そういわれてみればそんなような気もします。 まだまだ理解に乏しいためまた、壁に当たることもあるかと思いますが、その時は機会があればまたよろしくお願いいたします。

回答No.1

System::Objectを継承したクラスしかtagプロパティに代入できないのでは?

chaw-chaw
質問者

お礼

早速のご回答ありがとうございます。 下記のようにしても、エラーがでてしまいます。 どこがいけないのでしょうか。具体的にアドバイス頂ければ幸いです。 MY_CLASS myc; button1->tag = myc; ref class MY_CLASS : System::Object{ ・・・ }

関連するQ&A

  • 参照代入

    class ApBase extends Object implements Runnable (省略) ApBase aBase = new ApBase(); Object obj = aBase; Runnable rn = obj; × コンパイラにとってobjはObjectなのでRunnnableインターフェイス参照への代入は認められません。 -----ー---- 以前質問させてもらった内容の一部なのですが・・・ 参照代入でコンパイルエラーを引き起こす場合 「is a」の関係が成り立っていない場合ですよね? なぜコンパイルエラーなのですか? Objectクラスはすべてのクラスのスーパークラスですよね・・・ Runnableとobjectはis aではないのでしょうか??????

    • ベストアンサー
    • Java
  • オブジェクト・・・参照代入・・・???

    問題(1) class ApBase extends Object implements Runnable (省略) ApBase aBase = new ApBase(); Runnable aR = aBase; ○ オブジェクトにインターフェースが実装されていることがわかる限りオブジェクト参照をインターフェイス参照に 代入することは可能です。 問題2 class ApBase extends Object implements Runnable (省略) Object obj = aBase; Runnable rn = obj; × コンパイラにとってobjはObjectなのでRunnnableインターフェイス参照への代入は認められません。 同じほんの問題です。 矛盾していませんか??? ・・・・多分僕の理解が足りないだけです(^_^;) もう少しわかりやすく教えてください・・・ お願いいたします

    • ベストアンサー
    • Java
  • ListBoxからの読み込み

    本日アプリケーションをVisual C++ 2008 Expreee Editionで作り始めました。ListBoxに文字を書き込むことはできるのですが、ListBox(単一選択だと思います)に書いた文字を読み取ることができません。SelectedItemというプロパティを使ってobject型の何かを持ってきて・・・ということなのでしょうか?ヘルプを見ましたが言葉がいまいちわかりませんでした。 ListBoxの(Name)はPool1です。 どうすればListBoxで選択されている文字列を読み込めま(文字列変数に代入できま)すか?

  • 子クラスのオブジェクトに親クラスのオブジェクトを代入

    開発環境はMicrofoft visual stdio 2005 で開発言語はC#を使い、Windousアプリケーションでプログラミングしているのですが 子クラスのオブジェクトに、親クラスのオブジェクトを代入する方法が分からなくて困っています><。 ソースコードで説明すると class Car { } class Bike:Car { } Car oya = new Car(); Bike kodomo = new Car(); kodomo = oya;//これはエラーになる というかんじです。 これが代入できるような方法はないでしょうか? かなり抽象的な質問ですが、よろしければ御回答をお願いします。

  • オーバーライドとobjectクラスの継承(2)

    下記の手順でobjectクラスの継承をオーバーライドさせるプログラムを下記に作成したのですが、student[1].inputNumber("09H999");の部分がエラーになります。下記の手順で下記の結果を表示させる、つまり 動かすにはどこを修正・追加したらいいのですか?至急ご連絡をください。 手順 (1)main内で、studentをPersonクラスの配列変数として宣言する。要素は2つ用意する。 (2)student[0]をPersonクラスのオブジェクトとして作成し、身長、体重の値をstudent[0]にinputDataを用いて代入する(キー ボードから入力する必要はない)。 (3)student[1]をSandaiクラスのオブジェクトとして作成し、学籍番号、身長、体重の値をstudent[1]にinputDataと inputNumberを用いて代入する(キーボードから入力する必要はない)。 (4)studentのそれぞれのオブジェクトの内容を、forループを用いてshowDataを使い表示する。 (5)のループ内でstudent のそれぞれのオブジェクトのクラス名を表示する。 結果 student[0]: 身長: 180.2 cm, 体重: 70.3kg student[0] はclass Personです student[1]: 学籍番号:09H999, 身長: 168.3 cm, 体重: 55.2kg student[1] はclass Sandaiです class Person { private double height, weight; public void inputData(double ht, double wt) { height = ht; weight = wt; } public void showData() { System.out.println("身長: " + height + "cm, 体重:"+ weight + "kg"); } } class Sandai extends Person { private String number; public void inputNumber(String num) { number=num; } public void showData() { System.out.print("学籍番号:"+number+", "); super.showData(); } } class K2 { public static void main(String args[]) { Person student[] = new Person[2]; student[0] = new Person(); student[0].inputData(180.2, 70.3); student[1] = new Sandai(); student[1].inputData(168.3, 55.2); student[1].inputNumber("09H999"); for(int i=0; i<student.length; i++){ System.out.print("student["+(i)+"]:"); student[i].showData(); Class c1 = student[i].getClass(); System.out.println("student["+(i)+"]は"+c1+"です。"); } } }

    • ベストアンサー
    • Java
  • C# 親フォームで指定した値を子フォームで表示する

    表題の件がうまくできず、困っています。 やりたいことは 親フォームのリストボックスで選択した インデックス番号をshouDialog()で立ち上げた子フォーム側の textBoxに表示したいんですが、 何も表示されず困っています。 namespace test { public partial class Form1 : Form { //リスト変数 public string listChoise; [STAThreadAttribute] static void Main() { Application.Run(new Form1()); } public Form1() { InitializeComponent(); } private void listBox1_SelectedIndexChanged(object sender, EventArgs e) { listChoise = listBox1.SelectedIndex.ToString(); MessageBox.Show(listChoise);//←ここでは値がでます }     private void button1_Click(object sender, EventArgs e) { //子フォームを立ち上げる Form2 form = new Form2(); form.ShowDialog(); } } } ↓Form2クラス namespace test { public partial class Form2 : Form { public Form2() { InitializeComponent(); //リスト選択変数 Form1 list = new Form1(); textBox2.Text = list.listChoise; } } } この二つのクラスです。 とくにエラーはありません。 ちなみに >>>//リスト変数 >>>public string listChoise; の部分を public string listChose = "aaaaa"; としておくと、 子フォームのテキストボックスに"aaaaa"と表示されているようなんですが、 >>>listChoise = listBox1.SelectedIndex.ToString(); の値がちゃんと子フォームの方で受け取れていないようです。 結果はなにもひょうじされません。 子フォームの方で、 MessageBox.Show("listChoise");をしても 何も表示されません。 どんな原因が考えられますでしょうか。 よろしくお願いします。 環境:visualC# 2008 Express Edition

  • Access2000でTextBox変数の代入

    Access2000でTextBox変数を作成し、条件に応じて フォーム上に配置した2つのテキストボックスをその変数に代入したいのですが、うまくいきません。 Public tBox as TextBox If i = 1 Then Set tBox = テキスト1 ElseIf i = 2 Then Set tBox = テキスト2 End if ※ テキスト1、テキスト2はフォーム上に配置した テキストボックスの名称 このコードを実行すると、テキスト1は テキスト1.Textと解釈され、Textプロパティに何も設定 されていない場合、tBoxにはNULLが代入されます。 Textプロパティの値ではなく、テキストボックスオブジェクトそのものを変数に代入するにはどうすればよいのでしょうか。 ご教授お願いします。 環境は OS:Windows2000 Professional   Access2000 です。

  • ActiveX EXEのオブジェクトに渡したオブジェクトが微妙

    またまた微妙な質問ですみません。 ------- ActiveX EXEプロジェクト Class Hoge Public Sub Moge(lst) Dim Cast As ListBox MsgBox TypeName(lst) 'ListBoxと表示される Set Cast = lst 'ここがエラー Cast.List(2) = "hogehoge" 'キャストはできないがVariant型のままのアクセスは可能 End Sub ------- 標準EXE Class Form1 (List1を配置) Dim X As New Hoge Private Sub Form_Load() X.Moge List1 End Sub ----- このように、アウトプロセスのオブジェクトにフォームのコントロールを渡しました。 引数の型をAs ListBoxにしたかったのですが、それだとまずそこで型が一致しないといわれます。 しようがないのでVariantで引数を宣言し、渡した後にキャストしようと思ったのですが、そこでも型が一致しないといわれます。 TypeName関数は "ListBox" を返すし、Variant型のままメンバにアクセスすることはできるのですが、ListBox型の変数に代入することだけできないのです。 別プロセスのオブジェクトには、オブジェクトの参照は渡せないのでしょうか?

  • クラス中でコンストラクタを使わず変数に代入をする理由は?

    JAVAやJavascript、最近オブジェクト指向的な記述が可能になったphpなどの言語で次のようなクラス定義が可能です。 <JAVAの場合> class A { public int i1 = 1; public int i2; A() { i2 = 2; } } しかし最近覚えたC++では、例の「public int i1 = 1;」のようなクラスのスコープ内で代入を行うことは出来ず、その場所では「public int i2;」のように宣言のみ、代入はコンストラクタで行うようになっています。この場合はなぜ「public int i1 = 1;」はダメなのかと疑問に思っても「そういう仕様だ」と言われれば納得できます(やり方が1つだけなので)。 ではJAVAなどの言語で、例のような場所で「public int i1 = 1;」のような宣言と代入を行うことは、代入をコンストラクタを用いて行うこととどのような違いがあるのでしょうか?また、どちらが推奨されるのでしょうか?

  • デバック開始ファイルを変えたい

    こんにちは、 visual studio 2010 C#環境で勉強をしており 最初、クラスファイルを追加してデバック開始していたのですが、 途中からwindowsフォームを追加し、こちらをデバック開始起動させたいのですが、 方法がわかりません。 プロジェクトのプロパティ→アプリケーションの欄をみたのですが、スタートアップオブジェクトの ところにformがなかったものでして。

専門家に質問してみよう