何か創りたい。
http://toshirr.blog13.fc2.com/
* Toshi's Recess Room - Toshi Creates. - イベントの処理を別ファイルにした際の問題
<< 2017/09 - 2017/10 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 - 2017/11 >>

スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

[ No. ]
[ 日時 : --/--/-- (--.) --:--:-- ]
[ カテゴリ : スポンサー広告 ]


イベントの処理を別ファイルにした際の問題

前回の記事で編み出したイベント処理の別ファイルへの分割。
コード上は何ら問題ないものの、IDE 上でちょっと困ったことが発生しました。

前回の記事の通り、別ファイルに記述するイベント処理のコードは、
元々のイベント コードと全く同じ名前空間、クラスに属するメソッドとして書いています。
すると、ソリューション エクスプローラ上でのそのファイルに付いているアイコンが
普通の C# コード ファイルのものではなく、フォームのアイコンになっていたのです。

元々のイベント コードを記述したファイルもフォームのアイコン。
これは、コード内に System.Windows.Forms.Form を継承したクラスが存在することで
「このファイルはフォームに関するコードが書いてある」と IDE が認識するため、のようです。
属するクラスを同じにしたので、別ファイルの方もそうであるとみなされたのでしょう。

これだけならまあアイコンが違うという話で済みますが、ここからが問題。
ソリューション エクスプローラで別ファイルの方をダブルクリックすると、
先述の理由から IDE の判断によってフォーム デザイナが開かれてしまうのです。

フォーム デザイナを開いてほしいのは元々のファイルだけなので、
別ファイルは直接コード エディタを開いてほしいところですが、こうなってしまいました。
では、コードの記述を変えずに別ファイルを単なるコード ファイルと認識させるには
どうすればいいのでしょうか。

一つ試してみたのが、ソリューション エクスプローラ上で別ファイルを右クリックし、
[ファイルを開くアプリケーションの選択(N)...] をクリックし、
そこで [CSharp エディタ] を既定のエディタに設定する方法。
元々は [CSharp フォーム エディタ] だったのですが、これで直接エディタが開くようになります。

ところがこれは「ファイル毎の設定」ではなく「ファイルの種類毎」の設定のようで、
この設定にすると「フォームに関するコードが書いてあるファイル」という種類のファイルの
全てに対して適用されてしまうため、元々のファイルもエディタで開くようになってしまいます。
まあ元々のファイルをデザイナで開きたいときだけ、右クリックして [デザイナの表示(D)] を選べば
いいのでしょうが、ちょっと妥協です。もっとスマートな方法が無いか探します。

また試してみたのが、.csproj ファイルを直接編集し、
別ファイルをただのコード ファイルとして IDE に認識してもらうようにする方法。
ところが、それっぽいところを編集してみるものの、IDE で開くと勝手に元に戻されます。
やっぱりコード内を解析しているようです。

では、コードの中身を変えるのはどうでしょうか。
中身を変えた上で .csproj ファイルを編集し、IDE にただのコード ファイルとして
認識してもらえばいいのです。つまりメソッドを別なクラスにしてしまうのです。
System.Windows.Forms.Form を継承しないクラスにすれば、おそらく IDE もちゃんと認識してくれるはずです。

その状態で、フォームにある MenuStrip やその他のコントロールを名前空間や親クラスからの参照無しに
コードに書ければ解決します。ですが今のところ難しそうです。

更に、コントロールの Modifiers プロパティが Private だと他のクラスからアクセスできません。
このために Public に変更するのも若干腑に落ちないところがありますし、仮にそうしてアクセスするにも、
クラス名.コントロール名 のような書き方をしなければならないのです。

コントロール名だけを書いてアクセスしたい、更に Modifiers は Private のままにしたいなら、
やはり同じクラスのメソッドとして実装しなければなりません。となるので、

別ファイルでも結局同じクラスのメソッドとして実装し、ダブルクリックしてもデザイナが開かないように
[CSharp エディタ] を既定のエディタにし、デザイナを開く場合は元のファイルを右クリックして
[デザイナの表示(D)] をクリックするという妥協案に甘んじるしかないのかもしれません。

同じクラスのメソッドにしつつただのコード ファイルとして認識させるのが最良ですが、
その方法が見つからない限りはこうするしかなさそうです。

どうしても納得がいきそうにないです。
スポンサーサイト

[ No. 668 ]
[ 日時 : 2008/02/14 (Thu.) 20:37:06 ]
[ カテゴリ : プログラミング ]
[ コメント : 2 ]
[ トラック バック : 0 ]


コメント

[ No. 134 ]
[ 日時 : 2008/02/19 (Tue.) 21:13:37 ]
[ 名前 : Toshi # tur3yISU ]
[ URI : ]
[ タイトル : ]

お、ひさ。
まさかの視点からのコメントに多謝の限りを尽くしつつ。
高校生活も早一年、あっという間だった。

[ No. 131 ]
[ 日時 : 2008/02/19 (Tue.) 02:05:04 ]
[ 名前 : YuponTKD # 3v9IlUEY ]
[ URI : ]
[ タイトル : ]

おひさー^^
バレンタインを全く無視した内容に頭がついていきません(何


コメントの投稿









トラック バック


トラック バック URI

http://toshirr.blog13.fc2.com/tb.php/668-2318c71c


前後の記事

これ以降に書かれた記事 : partial があるのは
これ以前に書かれた記事 : イベント コードの別ファイルへの分離

プロフィール

Toshi

  • Author:Toshi
  • 何かを創りたい Toshi の記録


ブログ内の検索


最近の記事


最近のコメント


最近のトラック バック


カレンダー

09 | 2017/10 | 11
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30 31 - - - -


月別の記事


カテゴリ別の記事


RSS フィード


<< 2017/09 - 2017/10 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 - 2017/11 >>
* Toshi's Recess Room - Toshi Creates. - イベントの処理を別ファイルにした際の問題
http://toshirr.blog13.fc2.com/
(C) 2005 - 2009 Toshi, All Rights Reserved.

上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。