SlideShare a Scribd company logo
1 of 9
C# 継承フォームの作成
Microsoft MVP Hiroki.T
http://blog.hiros-dot.net/
copyright @2015 HIRO's.NET All Rights Reserved.
継承フォーム
 1つのプロジェクト内で似たようなフォームをたくさん作成する場
合は、共通した部分を抜き出したフォームを作成して継承するよ
うにしましょう。
 たとえば、複数のフォームに共通でステータスバーと[閉じる]ボタ
ンを持たせたいとします。
 この場合、共通部分はステータスバーと[閉じる]ボタンです。
 ステータスバーと[閉じる]部分だけを貼り付けた基本フォームを作
成しておいて、継承するようにします。
例
共通部分は
ステータスバーと[閉じる]ボタン
共通部分を抜き出したフォームを作成する
共通部品のみ貼り付けた
フォームを作成
この例ではファイル名を
frmBase.csとする
 プロジェクトに新規でフォームを1つ追加して以下のように設定し
ます。
共通フォームの[閉じる]ボタンの
クリックイベントコードを編集する
 各フォームの[閉じる]ボタンに処理をいちいち記述するのは面倒です。
 そこで共通フォームに配置した[閉じる]ボタンのクリックイベントのコードを以下の
ように編集しておきます。これにより、共通フォームを継承しているフォームに
[閉じる]ボタンの処理を記述する必要がなくなります。
/// <summary>
/// 共通フォームの[閉じる]ボタンのコード
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void btnClose_Click(object sender, EventArgs e)
{
this.Close();
}
共通フォームを継承したフォームを作成する
 プロジェクトに最初からあるForm1を、共通フォームを継承した
フォームにします。
 Form1のコードを開き継承元をFormからfrmBaseに変更します。
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
}
public partial class Form1 : frmBase
{
public Form1()
{
InitializeComponent();
}
}
frmBaseを継承したForm1を
デザイナで確認する
 frmBaseを継承したForm1をデザイナで確認してみましょう。
 共通フォームに配置した、ステータスバーと[閉じる]ボタンが表示されていることを確認できま
す。
 共通フォームに配置されていたステータスバーと[閉じる]ボタンの左上隅に小さな■のアイコ
ンが表示されています。これにより、継承によって表示されたコントロールは一目瞭然です。
継承元で配置した
コントロール
実行してみよう
 実行してみると、Form1には継承元のコントロールが表示されて
いることがわかります
 また、[閉じる]ボタンをクリックするとフォームが閉じられます。
 このように、継承元に配置したコントロールおよびコードは継承先
にも適用されます。
End

More Related Content

What's hot

いつやるの?Git入門 v1.1.0
いつやるの?Git入門 v1.1.0いつやるの?Git入門 v1.1.0
いつやるの?Git入門 v1.1.0Masakazu Matsushita
 
Javaの進化にともなう運用性の向上はシステム設計にどういう変化をもたらすのか
Javaの進化にともなう運用性の向上はシステム設計にどういう変化をもたらすのかJavaの進化にともなう運用性の向上はシステム設計にどういう変化をもたらすのか
Javaの進化にともなう運用性の向上はシステム設計にどういう変化をもたらすのかYoshitaka Kawashima
 
「伝わるチケット」の書き方
「伝わるチケット」の書き方「伝わるチケット」の書き方
「伝わるチケット」の書き方onozaty
 
DDD x CQRS 更新系と参照系で異なるORMを併用して上手くいった話
DDD x CQRS   更新系と参照系で異なるORMを併用して上手くいった話DDD x CQRS   更新系と参照系で異なるORMを併用して上手くいった話
DDD x CQRS 更新系と参照系で異なるORMを併用して上手くいった話Koichiro Matsuoka
 
リッチなドメインモデル 名前探し
リッチなドメインモデル 名前探しリッチなドメインモデル 名前探し
リッチなドメインモデル 名前探し増田 亨
 
ドメイン駆動設計の学習曲線とブレークポイント
ドメイン駆動設計の学習曲線とブレークポイントドメイン駆動設計の学習曲線とブレークポイント
ドメイン駆動設計の学習曲線とブレークポイント増田 亨
 
DDDのモデリングとは何なのか、 そしてどうコードに落とすのか
DDDのモデリングとは何なのか、 そしてどうコードに落とすのかDDDのモデリングとは何なのか、 そしてどうコードに落とすのか
DDDのモデリングとは何なのか、 そしてどうコードに落とすのかKoichiro Matsuoka
 
ドメインロジックの実装方法とドメイン駆動設計
ドメインロジックの実装方法とドメイン駆動設計ドメインロジックの実装方法とドメイン駆動設計
ドメインロジックの実装方法とドメイン駆動設計Tadayoshi Sato
 
ビジネスルールの複雑さに立ち向かう
ビジネスルールの複雑さに立ち向かうビジネスルールの複雑さに立ち向かう
ビジネスルールの複雑さに立ち向かう増田 亨
 
ブラック企業から学ぶMVCモデル
ブラック企業から学ぶMVCモデルブラック企業から学ぶMVCモデル
ブラック企業から学ぶMVCモデルYuta Hiroto
 
3週連続DDDその3 ドメイン駆動設計 戦略的設計
3週連続DDDその3  ドメイン駆動設計 戦略的設計3週連続DDDその3  ドメイン駆動設計 戦略的設計
3週連続DDDその3 ドメイン駆動設計 戦略的設計増田 亨
 
やはりお前らのMVCは間違っている
やはりお前らのMVCは間違っているやはりお前らのMVCは間違っている
やはりお前らのMVCは間違っているKoichi Tanaka
 
MVC の Model を考える
MVC の Model を考えるMVC の Model を考える
MVC の Model を考えるtomo_masakura
 
Prism + ReactiveProperty入門
Prism + ReactiveProperty入門Prism + ReactiveProperty入門
Prism + ReactiveProperty入門一希 大田
 
データベース設計徹底指南
データベース設計徹底指南データベース設計徹底指南
データベース設計徹底指南Mikiya Okuno
 
Test Yourself - テストを書くと何がどう変わるか
Test Yourself - テストを書くと何がどう変わるかTest Yourself - テストを書くと何がどう変わるか
Test Yourself - テストを書くと何がどう変わるかTakuto Wada
 
DDDとクリーンアーキテクチャでサーバーアプリケーションを作っている話
DDDとクリーンアーキテクチャでサーバーアプリケーションを作っている話DDDとクリーンアーキテクチャでサーバーアプリケーションを作っている話
DDDとクリーンアーキテクチャでサーバーアプリケーションを作っている話JustSystems Corporation
 
ドメイン駆動設計サンプルコードの徹底解説
ドメイン駆動設計サンプルコードの徹底解説ドメイン駆動設計サンプルコードの徹底解説
ドメイン駆動設計サンプルコードの徹底解説増田 亨
 
「実践ドメイン駆動設計」 から理解するDDD (2018年11月)
「実践ドメイン駆動設計」 から理解するDDD (2018年11月)「実践ドメイン駆動設計」 から理解するDDD (2018年11月)
「実践ドメイン駆動設計」 から理解するDDD (2018年11月)A AOKI
 
WPF開発での陥りやすい罠
WPF開発での陥りやすい罠WPF開発での陥りやすい罠
WPF開発での陥りやすい罠Sho Okada
 

What's hot (20)

いつやるの?Git入門 v1.1.0
いつやるの?Git入門 v1.1.0いつやるの?Git入門 v1.1.0
いつやるの?Git入門 v1.1.0
 
Javaの進化にともなう運用性の向上はシステム設計にどういう変化をもたらすのか
Javaの進化にともなう運用性の向上はシステム設計にどういう変化をもたらすのかJavaの進化にともなう運用性の向上はシステム設計にどういう変化をもたらすのか
Javaの進化にともなう運用性の向上はシステム設計にどういう変化をもたらすのか
 
「伝わるチケット」の書き方
「伝わるチケット」の書き方「伝わるチケット」の書き方
「伝わるチケット」の書き方
 
DDD x CQRS 更新系と参照系で異なるORMを併用して上手くいった話
DDD x CQRS   更新系と参照系で異なるORMを併用して上手くいった話DDD x CQRS   更新系と参照系で異なるORMを併用して上手くいった話
DDD x CQRS 更新系と参照系で異なるORMを併用して上手くいった話
 
リッチなドメインモデル 名前探し
リッチなドメインモデル 名前探しリッチなドメインモデル 名前探し
リッチなドメインモデル 名前探し
 
ドメイン駆動設計の学習曲線とブレークポイント
ドメイン駆動設計の学習曲線とブレークポイントドメイン駆動設計の学習曲線とブレークポイント
ドメイン駆動設計の学習曲線とブレークポイント
 
DDDのモデリングとは何なのか、 そしてどうコードに落とすのか
DDDのモデリングとは何なのか、 そしてどうコードに落とすのかDDDのモデリングとは何なのか、 そしてどうコードに落とすのか
DDDのモデリングとは何なのか、 そしてどうコードに落とすのか
 
ドメインロジックの実装方法とドメイン駆動設計
ドメインロジックの実装方法とドメイン駆動設計ドメインロジックの実装方法とドメイン駆動設計
ドメインロジックの実装方法とドメイン駆動設計
 
ビジネスルールの複雑さに立ち向かう
ビジネスルールの複雑さに立ち向かうビジネスルールの複雑さに立ち向かう
ビジネスルールの複雑さに立ち向かう
 
ブラック企業から学ぶMVCモデル
ブラック企業から学ぶMVCモデルブラック企業から学ぶMVCモデル
ブラック企業から学ぶMVCモデル
 
3週連続DDDその3 ドメイン駆動設計 戦略的設計
3週連続DDDその3  ドメイン駆動設計 戦略的設計3週連続DDDその3  ドメイン駆動設計 戦略的設計
3週連続DDDその3 ドメイン駆動設計 戦略的設計
 
やはりお前らのMVCは間違っている
やはりお前らのMVCは間違っているやはりお前らのMVCは間違っている
やはりお前らのMVCは間違っている
 
MVC の Model を考える
MVC の Model を考えるMVC の Model を考える
MVC の Model を考える
 
Prism + ReactiveProperty入門
Prism + ReactiveProperty入門Prism + ReactiveProperty入門
Prism + ReactiveProperty入門
 
データベース設計徹底指南
データベース設計徹底指南データベース設計徹底指南
データベース設計徹底指南
 
Test Yourself - テストを書くと何がどう変わるか
Test Yourself - テストを書くと何がどう変わるかTest Yourself - テストを書くと何がどう変わるか
Test Yourself - テストを書くと何がどう変わるか
 
DDDとクリーンアーキテクチャでサーバーアプリケーションを作っている話
DDDとクリーンアーキテクチャでサーバーアプリケーションを作っている話DDDとクリーンアーキテクチャでサーバーアプリケーションを作っている話
DDDとクリーンアーキテクチャでサーバーアプリケーションを作っている話
 
ドメイン駆動設計サンプルコードの徹底解説
ドメイン駆動設計サンプルコードの徹底解説ドメイン駆動設計サンプルコードの徹底解説
ドメイン駆動設計サンプルコードの徹底解説
 
「実践ドメイン駆動設計」 から理解するDDD (2018年11月)
「実践ドメイン駆動設計」 から理解するDDD (2018年11月)「実践ドメイン駆動設計」 から理解するDDD (2018年11月)
「実践ドメイン駆動設計」 から理解するDDD (2018年11月)
 
WPF開発での陥りやすい罠
WPF開発での陥りやすい罠WPF開発での陥りやすい罠
WPF開発での陥りやすい罠
 

More from Hiroki Takahashi

C# TreeViewを使用する2
C# TreeViewを使用する2C# TreeViewを使用する2
C# TreeViewを使用する2Hiroki Takahashi
 
C# TreeViewを使用する1
C# TreeViewを使用する1C# TreeViewを使用する1
C# TreeViewを使用する1Hiroki Takahashi
 
C# Database操作6 SqlDataAdapterを使用したデータの更新-
C# Database操作6  SqlDataAdapterを使用したデータの更新-C# Database操作6  SqlDataAdapterを使用したデータの更新-
C# Database操作6 SqlDataAdapterを使用したデータの更新-Hiroki Takahashi
 
C# Database操作5 SqlDataAdapterを使用したデータの取得-
C# Database操作5  SqlDataAdapterを使用したデータの取得-C# Database操作5  SqlDataAdapterを使用したデータの取得-
C# Database操作5 SqlDataAdapterを使用したデータの取得-Hiroki Takahashi
 
C# Database操作4 トランザクション処理-
C# Database操作4  トランザクション処理-C# Database操作4  トランザクション処理-
C# Database操作4 トランザクション処理-Hiroki Takahashi
 
C# Database操作3 データの更新-
C# Database操作3  データの更新-C# Database操作3  データの更新-
C# Database操作3 データの更新-Hiroki Takahashi
 
C# Database操作2 データの取得-
C# Database操作2  データの取得-C# Database操作2  データの取得-
C# Database操作2 データの取得-Hiroki Takahashi
 
C# Database操作1 接続と切断-
C# Database操作1  接続と切断-C# Database操作1  接続と切断-
C# Database操作1 接続と切断-Hiroki Takahashi
 
C# ドラッグ&ドロップ処理の実装
C# ドラッグ&ドロップ処理の実装C# ドラッグ&ドロップ処理の実装
C# ドラッグ&ドロップ処理の実装Hiroki Takahashi
 
C# 時間の掛かる処理をBackgroundWorkerコンポーネントで実行する
C# 時間の掛かる処理をBackgroundWorkerコンポーネントで実行するC# 時間の掛かる処理をBackgroundWorkerコンポーネントで実行する
C# 時間の掛かる処理をBackgroundWorkerコンポーネントで実行するHiroki Takahashi
 
C# ErrorProviderとValidatingイベント
C# ErrorProviderとValidatingイベントC# ErrorProviderとValidatingイベント
C# ErrorProviderとValidatingイベントHiroki Takahashi
 
C# モーダルフォームとモードレスフォーム
C# モーダルフォームとモードレスフォームC# モーダルフォームとモードレスフォーム
C# モーダルフォームとモードレスフォームHiroki Takahashi
 
C# FileSystemWatcherコントロールを使用したアプリケーションの作成
C# FileSystemWatcherコントロールを使用したアプリケーションの作成C# FileSystemWatcherコントロールを使用したアプリケーションの作成
C# FileSystemWatcherコントロールを使用したアプリケーションの作成Hiroki Takahashi
 
C#でディレクトリを再帰的に取得する
C#でディレクトリを再帰的に取得するC#でディレクトリを再帰的に取得する
C#でディレクトリを再帰的に取得するHiroki Takahashi
 
C#によるファイルの読み書き
C#によるファイルの読み書きC#によるファイルの読み書き
C#によるファイルの読み書きHiroki Takahashi
 

More from Hiroki Takahashi (15)

C# TreeViewを使用する2
C# TreeViewを使用する2C# TreeViewを使用する2
C# TreeViewを使用する2
 
C# TreeViewを使用する1
C# TreeViewを使用する1C# TreeViewを使用する1
C# TreeViewを使用する1
 
C# Database操作6 SqlDataAdapterを使用したデータの更新-
C# Database操作6  SqlDataAdapterを使用したデータの更新-C# Database操作6  SqlDataAdapterを使用したデータの更新-
C# Database操作6 SqlDataAdapterを使用したデータの更新-
 
C# Database操作5 SqlDataAdapterを使用したデータの取得-
C# Database操作5  SqlDataAdapterを使用したデータの取得-C# Database操作5  SqlDataAdapterを使用したデータの取得-
C# Database操作5 SqlDataAdapterを使用したデータの取得-
 
C# Database操作4 トランザクション処理-
C# Database操作4  トランザクション処理-C# Database操作4  トランザクション処理-
C# Database操作4 トランザクション処理-
 
C# Database操作3 データの更新-
C# Database操作3  データの更新-C# Database操作3  データの更新-
C# Database操作3 データの更新-
 
C# Database操作2 データの取得-
C# Database操作2  データの取得-C# Database操作2  データの取得-
C# Database操作2 データの取得-
 
C# Database操作1 接続と切断-
C# Database操作1  接続と切断-C# Database操作1  接続と切断-
C# Database操作1 接続と切断-
 
C# ドラッグ&ドロップ処理の実装
C# ドラッグ&ドロップ処理の実装C# ドラッグ&ドロップ処理の実装
C# ドラッグ&ドロップ処理の実装
 
C# 時間の掛かる処理をBackgroundWorkerコンポーネントで実行する
C# 時間の掛かる処理をBackgroundWorkerコンポーネントで実行するC# 時間の掛かる処理をBackgroundWorkerコンポーネントで実行する
C# 時間の掛かる処理をBackgroundWorkerコンポーネントで実行する
 
C# ErrorProviderとValidatingイベント
C# ErrorProviderとValidatingイベントC# ErrorProviderとValidatingイベント
C# ErrorProviderとValidatingイベント
 
C# モーダルフォームとモードレスフォーム
C# モーダルフォームとモードレスフォームC# モーダルフォームとモードレスフォーム
C# モーダルフォームとモードレスフォーム
 
C# FileSystemWatcherコントロールを使用したアプリケーションの作成
C# FileSystemWatcherコントロールを使用したアプリケーションの作成C# FileSystemWatcherコントロールを使用したアプリケーションの作成
C# FileSystemWatcherコントロールを使用したアプリケーションの作成
 
C#でディレクトリを再帰的に取得する
C#でディレクトリを再帰的に取得するC#でディレクトリを再帰的に取得する
C#でディレクトリを再帰的に取得する
 
C#によるファイルの読み書き
C#によるファイルの読み書きC#によるファイルの読み書き
C#によるファイルの読み書き
 

C# 継承フォームの作成