トップ回答者
partial class を使って自由にファイルを分けることは出来ますか?

質問
-
コードが自動的に生成された Windows Form Designer generated code のように、
たとえば、WindowsForms アプリのAddressForm があったとして、
public partial class AddressForm : Form
によって、自由にコードを分割できると、便利だなと思っています。
実際にVisual Studio で、とあるコードの分割を
public partial class AddressForm : Form
を利用して行う方法はあるのでしょうか?
ご存知の方、ぜひ教えてください。よろしくお願い致します。
回答
-
クリックイベントを別のコードファイルに分割(移動)出来るのでしょうか?
できます。
分ける前のコードファイルに自動でコードが追加されると思いますので、できたコードを切り取って、パーシャルで作った新しいファイルに貼り付けてください。イベントを別のファイルに分割することができませんでしたので、改めて確認させてください。
上の回答で間違っていないと思いたいですが、回答間違い・捉え間違いを減らすためにお願いです。
「分割することができませんでした」だと、どんな状況か想像しづらいです。もう少し具体的に書いてほしいです。
たとえば、「MainForm.cs を MainForm.cs と MainFormB.cs というパーシャルクラスにした。しかし、デザイナからイベントを追加すると必ず MainForm.cs にイベントハンドラができて、MainFormB.cs に分割できていない(意味がない)。」と書かれていれば、わかりやすいかと思います。
(何を期待して、結果としてどうなったのかを具体的に述べる)
質問スレッドで解決した場合は、解決の参考になった投稿に対して「回答としてマーク」のボタンを押すことで、同じ問題に遭遇した別のユーザが役立つ投稿を見つけやすくなります。- 回答としてマーク yasheeki 2010年10月8日 12:00
すべての返信
-
プロジェクトに C# コードファイルを新しく追加し、そのファイルに
public partial class AddressForm : Form { // コードをここに書く }
という風に記述すれば、クラスの実装を分割できます。
詳細は MSDN あたりを読むといいです。
http://msdn.microsoft.com/ja-jp/library/wa80x488.aspx
なかむら(http://d.hatena.ne.jp/griefworker) -
> クリックイベントを別のコードファイルに分割(移動)出来るのでしょうか?
> イベントを別のファイルに分割することができませんでしたので、改めて確認させてください。どう分割できなかったのでしょうか?基本的には問題なくできる筈ですが。
例えば Form1 というフォームがある場合、Form.Event.cs というファイルをプロジェクトに追加し(ファイル名は適当に付けました)、以下のように ButtonClick イベントを移動すればいいと思います。 こちらの環境は VS2010 Ultimate ですが、問題なく動作します。using System; using System.Windows.Forms; namespace WindowsFormsApplication11 { partial class Form1 { private void button1_Click(object sender, EventArgs e) { MessageBox.Show("Test"); } } }
ひらぽん http://d.hatena.ne.jp/hilapon/ -
クリックイベントを別のコードファイルに分割(移動)出来るのでしょうか?
できます。
分ける前のコードファイルに自動でコードが追加されると思いますので、できたコードを切り取って、パーシャルで作った新しいファイルに貼り付けてください。イベントを別のファイルに分割することができませんでしたので、改めて確認させてください。
上の回答で間違っていないと思いたいですが、回答間違い・捉え間違いを減らすためにお願いです。
「分割することができませんでした」だと、どんな状況か想像しづらいです。もう少し具体的に書いてほしいです。
たとえば、「MainForm.cs を MainForm.cs と MainFormB.cs というパーシャルクラスにした。しかし、デザイナからイベントを追加すると必ず MainForm.cs にイベントハンドラができて、MainFormB.cs に分割できていない(意味がない)。」と書かれていれば、わかりやすいかと思います。
(何を期待して、結果としてどうなったのかを具体的に述べる)
質問スレッドで解決した場合は、解決の参考になった投稿に対して「回答としてマーク」のボタンを押すことで、同じ問題に遭遇した別のユーザが役立つ投稿を見つけやすくなります。- 回答としてマーク yasheeki 2010年10月8日 12:00
-
ありがとうございます。
出来ました。で、なぜそれまで出来なかったかについては、
using System.Windows.Forms;
のコードを入れなかったからかもしれません。
また、class を追加するにあたって、
class xxx
という名前のまま
partial class Form1 : Form
という風に変更しなかったためかも知れません。残念ながら、その時のことを詳細に復元(回復)できませんでした。
ただ、参考の記述をコードに当てはめてみると、
問題なく、イベントも切り取り貼り付けで、分割することができました。ありがとうございます。
何が原因でできなかったかを伝えられないことが残念で
申し訳ありません。また、Azulean さんの
「分割することができませんでした」だと、どんな状況か想像しづらいです。もう少し具体的に書いてほしいです。
たとえば、「MainForm.cs を MainForm.cs と MainFormB.cs というパーシャルクラスにした。しかし、デザイナからイベントを追加すると必ず MainForm.cs にイベントハンドラができて、MainFormB.cs に分割できていない(意味がない)。」と書かれていれば、わかりやすいかと思います。
というご指導については、まさにその通りで、分かりずらい内容の質問になってしまい申し訳なく思っています。
おっしゃる通り、MainFormB.cs というパーシャルクラスにしたものの、デザイナからのイベント追加ではMainForm.cs に追加されてしまい、それを切り取ってMainFormB.csに貼り付けることだけで案外簡単に移動できるとは思わなかったばかりに、回り道をしてしまいました。
この回り道のせいで、何が原因でなぜ出来なかったかを思うように伝えることができなかったことが、残念です。いつも、あっちこっち飛びながらの歯がゆい中での質問のため、皆さんに状況をうまくお伝えできずに申し訳なく思っております。
ありがとうございます。今回教えていただいた方法で、問題なく処理できます(した)。