• 締切済み

C# フォームのShow()のオーバーライド

ご質問があります。 フォームが二つ(フォームA、フォームB)あり、フォームAからフォームBを開く時に、フォームBにコードを渡す必要があり、フォームBのShow()をオーバーライドさせて(Show()に引数を設定し、引数でコードを渡し、フォームBの変数にコードをセットして使用する)、コードを使用します。 このShow()のオーバーライドのさせ方なのですが、以下ではエラーが出てしまいました。 public partial class FormB : Form { private string hacyucode; public FormB() { InitializeComponent(); } override void Show(string code) { hacyucode = code; } } ※「オーバーライドする適切なメソッドが見つかりませんでした。」というエラーが出てしまいます。 Show()の適切なオーバーライドの方法をご教授していただけませんでしょうか。 よろしくお願い致します。

みんなの回答

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

引数が違う同じ働きをするメソッドならば『オーバーロード』で定義すればいいのではないかと思います 単純に public void Show( string code ) {   // 基本クラスのShowメソッドを呼ぶ   base.Show();   hacyucode = code; } といった具合にしてやればいいでしょう アクセス指定子の『public』が無いと『private』になってしまうので気おつけましょう また、override を使うには基本クラスで virtual(仮想関数またはメソッド) になっている必要があると思います …

関連するQ&A

  • C# フォームのShow()をオーバーライド

    ご質問があります。 フォームが二つ(フォームA、フォームB)あり、フォームAからフォームBを開く時に、フォームBにコードを渡す必要があり、フォームBのShow()をオーバーライドさせて(Show()に引数を設定し、引数でコードを渡し、フォームBの変数にコードをセットして使用する)、コードを使用します。 このShow()のオーバーライドのさせ方なのですが、以下ではエラーが出てしまいました。 public partial class FormB : Form { private string hacyucode; public FormB() { InitializeComponent(); } override void Show(string code) { hacyucode = code; } } ※「オーバーライドする適切なメソッドが見つかりませんでした。」というエラーが出てしまいます。 Show()の適切なオーバーライドの方法をご教授していただけませんでしょうか。 よろしくお願い致します。

  • VB2005 複数のフォームを同時に開く方法

    独学でVBを勉強している者です。 どうしてもわからないことがあるので、教えて下さい。 作ろうとしているのは、あるボタンを押すと、 別々のフォームが同時に開く処理なんですけど、上手くいかないんです。 dim A as new FormA dim B as new FormB A.show() B.show() のようにしても、 FormA.show() FormB.show() としても、 FormBしか画面に表示されないんです。 FormAのほうはタスクバーにだけ表示されます。 いろいろ調べたのですが原因がさっぱりわからないので、 もしお分かりの方がいたらヒントだけでも教えて下さい。 宜しくお願い致します。

  • 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

  • 「インタフェースを実装してそれが持つ抽象メソッドをオーバーライドする」

    「インタフェースを実装してそれが持つ抽象メソッドをオーバーライドする」は正しい? はじめまして。Javaのインタフェースに関する質問です。 私はこれまで、インタフェースを使うときは、インタフェースを実装してクラスを宣言し、そのクラス、またはサブクラスでインタフェースがもつすべての抽象メソッドを定義する、と理解していました。 しかし、下の例をみてください。抽象メソッドの定義を、インタフェースの実装の以前で与えています。問題無くコンパイルでき、実行できます。実行結果も以下の通りです。 インタフェースの抽象メソッドへの定義の与え方やその実行のされ方は、メソッドのオーバーライドと同様と思っていましたので、下記のコードでは「クラスBが抽象クラスではありません」や、「インタフェースの抽象メソッドがオーバーライドされていません」などの文法エラーがでると思っていました。 そこで、質問です。 インタフェースが持つ抽象メソッドの定義を与える場所について、または、これに関する説明のあるページなど、何かご存知でしたら教えてください。 ★コード★ interface X{   void show(); } class A{   public void show(){     System.out.println("A");   } } class B extends A implements X{ } public class Main{   public static void main(String[] args){     X x=new B();     x.show();   } } ★実行結果★ >java Main A ★Java環境★ java 1.6.0_21 javac 1.6.0_16

    • ベストアンサー
    • Java
  • javaのオーバーライドについての質問です。

    *  クラスParent04に受け取ったString配列の中身を全て大文字に変換するChangeメソッドが定義されています。クラスParent04を継承するクラスChild04でChangeメソッドを  オーバーライドして、String配列の中身を全て小文字に変換するように変更してください。  その後クラスOverRide04のmainメソッドからChangeメソッドを呼び出して、  変換後のString配列の要素を全て出力してください。 */ // オーバーライドされるので覆い隠される class ORParent04{    public String[] Change(String[] strArray){       int len = strArray.length;      String[] Array = new String[len];      for(int i = 0; i < len; i++){       Array[i] = strArray[i].toUpperCase();      }      return Array;   } } // ORParent04クラスを継承し、ORChild04でオーバーライド // こちらが適用される。 class ORChild04 extends ORParent04{    //ここからプログラムを追加してください。    public String[] Change(String[] strArray){       int len = strArray.length;       String[] Array = new String[len];       for(int i = 0; i < len; i++){                   // toLowerCaseで小文字に変換         Array[i] = strArray[i].toLowerCase();       }       // 値を返す       return Array;    } } class OROverRide04{   public static void main(String[] args){        // ORChild04クラスのインスタンス化     ORChild04 ORchild04 = new ORChild04();       //ここからプログラムを追加してください。     // Changeメソッドの呼び出し:戻り値String[],引数String[]      String[] array = ORchild04.Change(String[] args);          // 表示      System.out.println(array);   }  } このような問題で、現在これをコマンドプロンプトでコンパイルすると、mainメソッド内のString[] array = ORchild04.Change(String[] args);メソッド呼び出し部分が指定され、 「'.class'がありません」 「;がありません」 という2つのエラーが表示されます。ネットでエラー表記の意味を検索し、コードを確認しましたが、「{}」と上記より上の行の;が特に抜けている、という訳ではありません。勿論自分が何か見落としている為にコンパイルエラーになるのですが、戻り値と引数の値は合わせているので、心情としては「動けジ・O!何故動かん!?」という具合です。 どなたか考え方やヒントなどお願い致します。後もう少しだと思うのですが。。。

    • ベストアンサー
    • Java
  • C# フォームプログラミングで

    public partial class Form2 : Form { public Form2() { InitializeComponent(); } private void Form2_Load(object sender, EventArgs e) { //Graphics grfx = CreateGraphics(); } private void Form2_Paint(object sender, PaintEventArgs e) { Form2 form2; form2.Paint += new PaintEventHandler(PaintHandler1); } static void PaintHandler1(object objSender,PaintEventArgs e) { Graphics grfx = e.Graphics; grfx.DrawString("test",Font font,Brushes.Black,0,0);//←ここでエラー } } このように書くと「引数を2個指定できる、メソッド DrawString のオーバーロードはありません」 というエラーがでてフォームに文字を表示できません 最初に「空のプロジェクト」で作れば普通にDrawStringで文字を表示できるのですが 「Windowsフォーム」を選んでからだと表示できないのはなぜでしょうか? 何がいけないのでしょう。

  • 他のフォームから別のフォームのサブルーチンを呼び出す

    例えばフォームAからフォームBのCommand1_clickというサブルーチンを呼び出そうとすればどのようにすればいいんでしょうか? 私は Call FormB!Command_click とフォームAに書きましたがうまくいきませんでした

  • オーバーライド

    こんにちは。 javaの勉強をしているのですが コンパイルエラーが発生しました。 オーバーライドのプログラムに関する質問です。 まずはプログラムなんですが class Human{ protected String name; protected int height; protected double weight; public Human(){ name = ""; height = 0; weight = 0.0; } public void setName(String n){ name = n; } public void setHeight(int h){ height = h; } public void setWeight(double w){ weight = w; } public void show(){ System.out.println(name + "の身長は" + height + "cm。体重は" + weight + "kgです。"); } } class Teacher extends Human{ private String cource; public void setCource(String c){ cource = c; } public void show(){ System.out.println("担当科目は" + course + "です。"); } } class Ex73{ public static void main(String args[]){ Student human1 = new Student(); human1.setName("一郎"); human1.setHeight(164); human1.setWeight(62.5); human1.setCourse("java"); human1.show(); } } /* Ex73.java:35: シンボルを解決できません。 シンボル: 変数 course 場所 : Teacher の クラス System.out.println("担当科目は" + course + "です。"); ^ Ex73.java:47: シンボルを解決できません。 シンボル: メソッド setCourse (java.lang.String) 場所 : Student の クラス human1.setCourse("java"); */ このプログラムは TeacherクラスでHumanクラスのshow()メソッドをオーバーライドすると言うものです。 どなたかよろしくお願いします。

    • ベストアンサー
    • Java
  • VB A,Bフォームから同一Cフォームを呼び出し呼出元によってCの処理を変えたい

    環境 WindowsXP SP3.0 VB6.0 宜しくお願いします。 表題通り、A.frm,B.frmという異なったフォームがあり、A.Bの処理で同一C.frmを C.Show 1 とモーダルで表示しています。 ここで、呼び出し元A,Bによって、C内部の処理を変えたいのですが Cの呼び出し元がAなのかBなのか、判定させるよいルーチンが思いつきません。 CのForm.Loadの引数に与えようと考えたのですが当然構文エラーになります。 Public変数を宣言して適当なパラメータを格納しC内で判定すればよい とは思うのですが、それはなるべく避けたいのです。 プロジェクト的には、A.vbpとB.vbpにフォームとしてC.frmを取り込んでいます。 よいアイデアや検索のヒントがあればご教授ください。

  • 【VC++2005(CLR)】フォームを閉じたことを検知するには?

    いつもお世話になっております。 現在フォームAからフォームBをモードレスで呼び出しております。 フォームBが閉じたことをフォームAに知らせたいのですが、 どのようにすればよいか教えて頂けませんでしょうか。 現在下記のタイミングでコーディングすればよいと思うのですが、 いかがでしょうか。 private: System::Void FormB_FormClosing(System::Object^ sender, System::Windows::Forms::FormClosingEventArgs^ e) { //ここにコード記述 } お手数ですが、よろしくお願いします。