Visual Sutdioの継承について

このQ&Aのポイント
  • Form1のデザインをForm2で継承する方法や、独自のイベントを作成する方法について解説します。
  • Visual Studioを使用して、Form1のデザインをForm2で継承する方法を解説します。また、Form2で独自のイベントを作成する方法についても説明します。
  • Visual StudioでのFormの継承方法と、独自のイベント作成について詳しく解説します。Form1のデザインをForm2で継承する手順や、Form2で独自のイベントを作成する方法を紹介します。
回答を見る
  • ベストアンサー

Visual Sutdioの継承について

Visual Sutdioの継承についてお教えください こんにちは。Form1のデザインをForm2で継承したいと思っています。 そこで、継承ピッカーを使い、Form1のデザインをForm2で継承しました。 ここまでは良いのですが、継承したいのはあくまでフォームで、ボタン押下時のコードはForm2独自のコードを書きたいと思っています。 しかし、Form2のボタン押下時のイベントを書いても、Form1のイベントが起こった後に、Form2で記述したイベントが発生します。 このような事は避けて、Form2で作成した独自のイベントを作りたいと思いますが、どのようにすれば良いでしょうか? 宜しくお願いします。

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

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

・継承元となるフォーム(コントロールのデザインも含む) ・Form1となるフォーム ・Form2となるフォーム の3つに分けましょう。 んで、Form1にはForm1のロジックを、Form2にはForm2のロジックを 書けば済みます。 どうしてもそれが出来ない環境ならば ・Form1となるフォーム ・Form2となるフォーム を作った上で、Form1のボタン押下時のイベントは特定メソッドを 呼ぶだけ。 Form1にメソッドをProtected Overridable(C#ならvirtual)で宣言して そこにForm1のロジックを書く。 Form2ではそのメソッドをオーバーライドして上書きする。 とかしないと出来ません。 基本的に、継承しない部分があるなら、共通部分だけを 抜き出してそれをベースとして継承すべきでしょう。 共通部分でないものを、継承先でムリヤリ制御して処理させないというのは 考え方としてNGです。

fflashing
質問者

お礼

ご回答ありがとうございます!継承元となるフォームと他フォーム2つ作れば解決するというのは、読んでいてなるほど!と思いました。こちら使わさせて頂きます。 Virtual等を使う方法は、まだそこまで知識がなく、今後の参考にさせて頂きます。 C#を本を読みながら勉強していて、あるフォームを作った後に、そういえばフォームを継承できれば同じ機能を使えるかなと思い、継承について調べ始めました(VBAしかさわったことがなくて、継承の考えがよくわからなかったので、色々つまってしまいました)。 大変助かりました。ありがとうございました。

関連するQ&A

  • フォームモジュールが作られない

    アクセスです。 新規でフォーム1を作成し、何もしないで(いじらないで)保存し、 VBE画面でフォーム1のForm_Loadイベントにコードを記述しようと思っても、  画像のようにフォームモジュールがありません。 フォームのデザインビューから適当に何かのイベントプロシージャーのボタンを押せば、 フォームモジュールが生成されます。 これは仕様でしょうか? エクセルは最初からシートモジュールやブックのモジュールがありますよね。

  • C++を勉強し始めたばかりの初心者なのですが、クラスの継承に関して・・・

    Visual C++ 2008で、新しいwindowsフォームアプリケーションを作成したら、Form1.hの上の方に public ref class Form1 : public System::Windows::Forms::Form という行がありました。これは開発環境に実装されている System::Windows::Forms::Formクラスを継承し、Form1クラスを新たに作成しますという意味なのですよね? このとき、2つ目のpublicは、継承の仕方、この場合結果的にはSystem::Windows::Forms::Formクラスに含まれるメンバの、private以外がそのまま受け継がれる、という事になりますよね? それで、このref classというのは、ポインタみたいな意味でしょうか?refは書かないと別の継承方法になるのでしょうか? また、最初のpublicはどういう意味なのでしょう? もしかして、この2つについては、System::Windows::Forms::Formクラスを継承して新規フォームを作る場合の、定型みたいなものなのでしょうか?

  • VB2005ExpressEditionでのフォーム継承

    お世話になります。 VB2005ExpressEditionには継承ピッカーと呼ばれる機能が無い?ようですが、 フォーム継承(下記MSDNサイト)をする事は可能なのでしょうか? 可能ならばその方法を教えて下さい。 宜しくお願い致します。 ■チュートリアル : ビジュアル継承のデモンストレーション http://msdn.microsoft.com/library/ja/default.asp?url=/library/ja/vbcon/html/vbwlkwalkthroughdemonstratingvisualinheritance.asp

  • 継承とは?

    お世話になります。 現在独学でJavaを学んでいるのですが、 『継承』のところでつまずいてしまいました。 参考書を元に継承の章を読んでいたのですが、 まず頭に浮かんだのは、 「継承をする意味は?」ということです。 継承をすることとしないことで何が違うのか。 また、必ず継承を行わなければならないような場面というのはあるのでしょうか? 特にSwingアプリケーションを作成していくと、 継承しないコードと継承したコードで記述ががらっと変わる気がしますが、 動作的に同じであればどっちでも良いのではないのか?というのが、 私の意見です。 この部分についてわかり安く説明している書籍やHPなどがありましたら 教えていただければ幸いです。

    • ベストアンサー
    • Java
  • 継承したコントロールのイベント

    VB2005を使用しています。 form1にbutton1が設置(ツールボックスからの貼り付け)されているとして、 form2で継承「Inherits form1」します。でリビルド。 この時点で、form2はform1と全く同じデザインです。 form2で継承したbutton1は  Public Class Form2   ~  End Class 内で Private Sub Button1_Click(ByVal sender As System.Object, _ ByVal e As System.EventArgs) Handles Button1.Click のようにイベントを設定できないのでしょうか? いろいろ検索等はして、「オーバライド」なるものがあることはわかったのですが、具体的な使い方などが全くわかりません。 できれば簡単なコードなんかを教えていただければとても助かるのですが。オーバーライド以外でもなにか可能な方法があれば是非アドバイスください。 宜しくお願いいたします。

  • keypress

    Visual Basic について  keypress 関数について [F2]キーを押下しても keypress イベントは発生しません (1)プロパティの設定ではなく、コードでどのように記述したらいいのでしょうか? (2)それとも、できないのでしょうか? 以上、宜しくお願いします

  • Visual-C#の event キーワードの「意義」が分かりません

    Visual-C#というものを初めて触っている者です。 フォーム上にボタン等のコントロールを配置して、ボタンをダブルクリックすると、イベントハンドラをユーザが記述するコード部分(partial class)が表示されてくるのですが(Form1.cs)、このpartial classの残りの、ユーザが編集する必要のないコードはForm1.Designer.cs内に自動生成されます。 このForm1.Designer.cs内に、たとえば this.Button1.Click += new System.EventHandler( this.Button1_Click );  ←(1) のようなコードが自動生成されているわけです。 ここで、Button1とはButtonクラスのオブジェクトであり、ClickとはButtonクラスの(Controlクラスから継承した)Clickイベントだということです。 http://msdn.microsoft.com/ja-jp/library/system.windows.forms.control.click(VS.85).aspx public event EventHandler Click  ←(2) ここで使用されているEventHandlerとは何かというと、delegateです。 http://msdn.microsoft.com/ja-jp/library/system.eventhandler.aspx public delegate void EventHandler(Object sender, EventArgs e)  ←(3) 「イベントとは、コンピュータ・プログラムの実行に際し、何らかのアクションが発生した際にプログラムに発信される信号(これをメッセージと呼んだりする)をいう。」(『ウィキペディア(Wikipedia)』) この「イベント」を、.NetFrameworkのクラスライブラリでは、(2)のように「EventHandler」という名前のデリゲートクラス型の変数として定義しているわけですが、(2)の中の「event」というキーワードの「意義」が分かりません。 Controlクラス定義内で(2)式のように、コントロールの「クリック」イベントを、「EventHandler」という名前のデリゲートクラス型の変数と定義するというのなら、それはそれで分かるのですが、なぜ更に「event」というキーワードを付ける必要があるのかが、よく分からないのです。

  • 親のイベントを実行させない為には?

    VisualC#2005です。 ボタンがあり、そのボタンをクリックした際にメッセージが出力されるフォームが あったとします(BaseForm)。 そのフォームを利用してあるプロジェクトを作成し、 ボタンがクリックされた時にはフォームを閉じる動作をさせるとします(ExForm)。 この時、ExFormにBaseFormのボタンクリックイベントを発生させない方法は あるのでしょうか? つまり、ある特殊な場合に限り、イベントを継承したくありません。 宜しくお願い致します。

  • VB2005 継承元のResourcesが継承先で読み込めない

    開発環境 VB2005 フォームの継承を行っていて、 継承元の方のフォームにボタンがあり、 My.Resourcesにてリソースファイルから取り出した文字列を メッセージボックスで表示します。 継承先の方のフォームにて継承したボタンを押した時に、 My.Resourcesにて文字列を取り出そうとしたところ、 My.Resources自体が認識せず、エラーになってしまいます。 継承元のリソースファイルから、 継承先では取得できないのでしょうか? よろしくお願い致します。

  • VSC#Epressで、FormのShowsに

    お世話になります。 VisualStudioC#2010Expressにて、フォーム(A)を作成し、 そのフォーム(A)にShownイベントを取り付けます。 そして、そのフォームを継承したフォーム(B)を作ります。 すると、そのフォーム(B)のみ、実行時だけではなく、 VisualStudioでフォームのデザイン時に そのフォームを開くと、VisualStudio内でもShownイベントが発生してしまいます。 (A)のフォームでは、この現象は起こりません。 下記のように、表示時に閉じるか否かの分岐をしておくと、 デザイナでも開いた瞬間にメッセージボックスが出て閉じてしまい、 二度と編集できなくなってしまいます。 はっきり言って迷惑です。 デザインしている途中でイベントが発生しないようにするには、 どうすればよいでしょうか。 よろしくお願いいたします。 フォーム(A) 継承元 using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Windows.Forms; namespace WindowsFormsApplication1 { public partial class Form1 : Form { private string a = null; public Form1() { InitializeComponent(); } private void Form1_Shown(object sender, EventArgs e) { if (a == null) { MessageBox.Show("aが設定されていません。"); this.Close(); } } } } フォーム(B) 継承先 using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace WindowsFormsApplication1 { public class Class1 : Form1 { } }

専門家に質問してみよう