- PR -

複数フォームでの共通処理

投稿者投稿内容
extream
ベテラン
会議室デビュー日: 2005/12/26
投稿数: 83
投稿日時: 2006-01-11 17:53
C#の1つのプロジェクトの中に、「frmMain,frmLeft,frmRight」の3つのフォームがあります。
frmLeft,frmRightは、frmMainと見た目がほぼ同じで、同じような処理を行うことが多々あります。
上記3つに同じ処理を記述するのは効率が悪いので、frmLeftやfrmRightはfrmMainを継承するようにしたいのですが、formクラスの継承が上手くできませんでした。

#class frmLeft : frmMain のようにすると、frmLeft上にfrmMainのテキストボックス
 やボタン等が表示されてしまいました。

同じような画面が複数ある場合、どのようにすれば同じようなコードをたくさん書かずにすむのでしょうか?
囚人
ぬし
会議室デビュー日: 2005/08/13
投稿数: 1019
投稿日時: 2006-01-11 18:04
こんにちは。

frmMain,frmLeft,frmRight から共通部分を括りだした frmBase を継承とか、
「同じような処理を行う」部分だけ別の処理クラスにして、呼び出すとかはどうでしょうか。

_________________
囚人のジレンマな日々
じゃんぬねっと
ぬし
会議室デビュー日: 2004/12/22
投稿数: 7811
お住まい・勤務地: 愛知県名古屋市
投稿日時: 2006-01-11 18:07
引用:

Gunsさんの書き込み (2006-01-11 17:53) より:

frmLeft,frmRightは、frmMainと見た目がほぼ同じで、同じような処理を行うことが多々あります。


全く同じではなく「同じような」であれば、インターフェイスの出番ですね。

全く同じ方に同じようなことを書くのもアレなので、前スレのリンクです。

  FORMオブジェクトについて

_________________
C# と VB.NET の入門サイト
じゃんぬねっと日誌
たつごろー
ぬし
会議室デビュー日: 2004/10/25
投稿数: 496
投稿日時: 2006-01-11 18:09
同じ処理があるというだけで継承を使うのはよくありません。
同じ処理は別のクラスにまとめて、おのおののformでnewして呼び出せばよいでしょう。

_________________
たつごろー
codeseek
こみゅぷらす
R・田中一郎
ぬし
会議室デビュー日: 2005/11/03
投稿数: 979
投稿日時: 2006-01-11 18:12
他に、コントロールを作るのも良いかもしれません。
これは、3つのフォームに似たような動作をさせたいが、コントロールのサイズや配置が変わるような場合に便利です。
extream
ベテラン
会議室デビュー日: 2005/12/26
投稿数: 83
投稿日時: 2006-01-11 18:29
みなさん、回答ありがとうございます。

インタフェースについてはまだ知識が乏しいのですが、私がやりたいことを実現するには一番いい方法かもしれません。(引き続き勉強します。)
もしくは、たつごろーさんがおっしゃるように、処理クラスを作成すべきかもしれません。

ちなみに、同じような処理をする場合や、まったく同じ処理をする場合もあります。
(文字列を特定フォーマットに変換するメソッドなど)
VC++を触っていた時に、formではないクラスの継承を一度やったことがあり、同じようなことができないかなぁと思って質問しました。
囚人
ぬし
会議室デビュー日: 2005/08/13
投稿数: 1019
投稿日時: 2006-01-11 18:55
引用:

(文字列を特定フォーマットに変換するメソッドなど)


そのメソッドに関しては、継承で共有すべきシナリオでないですね。

プログラムの各構成単位は、より疎結合にする事が理想ですが、継承は「最も密結合」です。
_________________
囚人のジレンマな日々
じゃんぬねっと
ぬし
会議室デビュー日: 2004/12/22
投稿数: 7811
お住まい・勤務地: 愛知県名古屋市
投稿日時: 2006-01-11 19:06
引用:

Gunsさんの書き込み (2006-01-11 18:29) より:

(文字列を特定フォーマットに変換するメソッドなど)


これは、Form に関係ないロジックですね。
Form には GUI に関すること以外はあまり記述しません。

_________________
C# と VB.NET の入門サイト
じゃんぬねっと日誌

スキルアップ/キャリアアップ(JOB@IT)