- 締切済み
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()の適切なオーバーライドの方法をご教授していただけませんでしょうか。 よろしくお願い致します。
- hukusato
- お礼率38% (5/13)
- その他(プログラミング・開発)
- 回答数1
- ありがとう数1
- みんなの回答 (1)
- 専門家の回答
みんなの回答
- redfox63
- ベストアンサー率71% (1325/1856)
引数が違う同じ働きをするメソッドならば『オーバーロード』で定義すればいいのではないかと思います 単純に 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()の適切なオーバーライドの方法をご教授していただけませんでしょうか。 よろしくお願い致します。
- 締切済み
- C・C++・C#
- VB2005 複数のフォームを同時に開く方法
独学でVBを勉強している者です。 どうしてもわからないことがあるので、教えて下さい。 作ろうとしているのは、あるボタンを押すと、 別々のフォームが同時に開く処理なんですけど、上手くいかないんです。 dim A as new FormA dim B as new FormB A.show() B.show() のようにしても、 FormA.show() FormB.show() としても、 FormBしか画面に表示されないんです。 FormAのほうはタスクバーにだけ表示されます。 いろいろ調べたのですが原因がさっぱりわからないので、 もしお分かりの方がいたらヒントだけでも教えて下さい。 宜しくお願い致します。
- ベストアンサー
- Visual Basic
- 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
- ベストアンサー
- C・C++・C#
- 「インタフェースを実装してそれが持つ抽象メソッドをオーバーライドする」
「インタフェースを実装してそれが持つ抽象メソッドをオーバーライドする」は正しい? はじめまして。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フォーム」を選んでからだと表示できないのはなぜでしょうか? 何がいけないのでしょう。
- ベストアンサー
- C・C++・C#
- 他のフォームから別のフォームのサブルーチンを呼び出す
例えばフォームAからフォームBのCommand1_clickというサブルーチンを呼び出そうとすればどのようにすればいいんでしょうか? 私は Call FormB!Command_click とフォームAに書きましたがうまくいきませんでした
- ベストアンサー
- Visual Basic
- オーバーライド
こんにちは。 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を取り込んでいます。 よいアイデアや検索のヒントがあればご教授ください。
- 締切済み
- Visual Basic
- 【VC++2005(CLR)】フォームを閉じたことを検知するには?
いつもお世話になっております。 現在フォームAからフォームBをモードレスで呼び出しております。 フォームBが閉じたことをフォームAに知らせたいのですが、 どのようにすればよいか教えて頂けませんでしょうか。 現在下記のタイミングでコーディングすればよいと思うのですが、 いかがでしょうか。 private: System::Void FormB_FormClosing(System::Object^ sender, System::Windows::Forms::FormClosingEventArgs^ e) { //ここにコード記述 } お手数ですが、よろしくお願いします。
- ベストアンサー
- C・C++・C#