C# と VB.NET の質問掲示板

わんくま同盟

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト

ツリー一括表示

フォームのイベント記述場所について /mashimo (24/02/22(Thu) 18:48) #102980
Re[1]: フォームのイベント記述場所について /魔界の仮面弁士 (24/02/22(Thu) 21:46) #102981
  └ Re[2]: フォームのイベント記述場所について /mashimo (24/02/23(Fri) 10:35) #102984
    └ Re[3]: フォームのイベント記述場所について /魔界の仮面弁士 (24/02/23(Fri) 11:58) #102986
      └ Re[4]: フォームのイベント記述場所について /mashimo (24/02/23(Fri) 17:21) #102987 解決済み


親記事 / ▼[ 102981 ]
■102980 / 親階層)  フォームのイベント記述場所について
□投稿者/ mashimo (6回)-(2024/02/22(Thu) 18:48:28)

分類:[VB.NET/VB2005 以降] 

Win10 Pro+Visual Studio2022 Pro+Visual BasicでWindowsフォームアプリケーション(.NET)作成中です

FormにTabControlをおいて、各ページにいくつかのButtonを配置しています。
デザイナ上でButtonをクリックすると、ButtonのClickイベントがPublic Class Form内に生成されます。
TabControlの各ページに沢山のButtonがあるので、ページごとにイベントを分割したいです(単に見やすさのため)。
ソリューションに追加した別のモジュールに、Form上のButtonのイベントを記述することはできるでしょうか?

TabControlのTabPage1上のButtonのイベント→Module1へ、TabPage2上のButtonのイベント→Module2へ・・・
といったイメージです。

上記方法でなくても、TabPage毎のイベントをきれいに分ける方法があれば教えて頂きたいです。

よろしくお願いします


[ □ Tree ] 返信 編集キー/

▲[ 102980 ] / ▼[ 102984 ]
■102981 / 1階層)  Re[1]: フォームのイベント記述場所について
□投稿者/ 魔界の仮面弁士 (3752回)-(2024/02/22(Thu) 21:46:39)
No102980 (mashimo さん) に返信
> ソリューションに追加した別のモジュールに、Form上のButtonのイベントを記述することはできるでしょうか?

ソースファイルの管理上の話なら、Partial Class を使えば良いのではないでしょうか。

現状も、Form1.vb と Form1.designer.vb という 2 つのファイルで
Form1 クラスのソースコードが記載されていますよね。
https://learn.microsoft.com/ja-jp/visualstudio/ide/class-designer/how-to-split-a-class-into-partial-classes?view=vs-2022&tabs=vb


類似品として、Partial メソッドというものもあります。
http://rucio.cocolog-nifty.com/blog/2010/04/post-9d67.html
[ 親 102980 / □ Tree ] 返信 編集キー/

▲[ 102981 ] / ▼[ 102986 ]
■102984 / 2階層)  Re[2]: フォームのイベント記述場所について
□投稿者/ mashimo (8回)-(2024/02/23(Fri) 10:35:43)
No102981 (魔界の仮面弁士 さん) に返信
> ■No102980 (mashimo さん) に返信
>>ソリューションに追加した別のモジュールに、Form上のButtonのイベントを記述することはできるでしょうか?
>
> ソースファイルの管理上の話なら、Partial Class を使えば良いのではないでしょうか。
>
> 現状も、Form1.vb と Form1.designer.vb という 2 つのファイルで
> Form1 クラスのソースコードが記載されていますよね。
> https://learn.microsoft.com/ja-jp/visualstudio/ide/class-designer/how-to-split-a-class-into-partial-classes?view=vs-2022&tabs=vb
>
>
> 類似品として、Partial メソッドというものもあります。
> http://rucio.cocolog-nifty.com/blog/2010/04/post-9d67.html

ヒントありがとうございます
確かにこれまでPartialキーワードを目にしてきましたが、どういうものか調べたこともありませんでした。
ためしにPublic Class Form_mainをPartial Public Class Form_mainに変更、追加したClassも同じ名前に変更したところ、イベントプロシージャをそのまま移動しても思ったような動作を確認できました。
ただし、VSのデザイナー上では追加したClass側にも新しいFormがぶら下がります。
無視すれば良いみたいですが、あまり気持ちよくないです。
このあたりもう少し勉強します
[ 親 102980 / □ Tree ] 返信 編集キー/

▲[ 102984 ] / ▼[ 102987 ]
■102986 / 3階層)  Re[3]: フォームのイベント記述場所について
□投稿者/ 魔界の仮面弁士 (3754回)-(2024/02/23(Fri) 11:58:43)
No102984 (mashimo さん) に返信
> VSのデザイナー上では追加したClass側にも新しいFormがぶら下がります。

追加するファイル名を
 Form1.Panel1.Designer.vb
といった命名にしておけば、フォームデザイナーが開かずに済みます。

ただし Form1.Designer.vb と同様、コードビューで右クリックしても[デザイナーの表示]メニューは出てきません。
そこでせめて、ファイル間の関係を分かりやすくするため、ソリューション エクスプローラー上で

 Form1.vb
 ┗Form1.Designer.vb
 Form1.Panel1.Designer.vb

だったものを、

 Form1.vb
 ┣Form1.Designer.vb
 ┗Form1.Panel1.Designer.vb

あるいは

 Form1.vb
 ┗Form1.Designer.vb
  ┗Form1.Panel1.Designer.vb

といった階層しておくと分かりやすくなるかと思います。
この変更は .vbproj に一行書き加えることで実現できます。

たとえば、元の .vbproj の中身が
    <Compile Include="Form1.vb">
      <SubType>Form</SubType>
    </Compile>
    <Compile Include="Form1.Designer.vb">
      <DependentUpon>Form1.vb</DependentUpon>
      <SubType>Form</SubType>
    </Compile>
    <Compile Include="Form1.Panel1.Designer.vb">
      <SubType>Form</SubType>
    </Compile>
であったのなら、そこに一行加えて
    <Compile Include="Form1.vb">
      <SubType>Form</SubType>
    </Compile>
    <Compile Include="Form1.Designer.vb">
      <DependentUpon>Form1.vb</DependentUpon>
      <SubType>Form</SubType>
    </Compile>
    <Compile Include="Form1.Panel1.Designer.vb">
      <DependentUpon>Form1.vb</DependentUpon><!-- ★これを追加 -->
      <SubType>Form</SubType>
    </Compile>
のようにします。これで階層化されます。

.NET Framework ではなく .NET の場合はこちら。
https://learn.microsoft.com/ja-jp/visualstudio/ide/file-nesting-solution-explorer?WT.mc_id=DT-MVP-8907&view=vs-2022

[ 親 102980 / □ Tree ] 返信 編集キー/

▲[ 102986 ] / 返信無し
■102987 / 4階層)  Re[4]: フォームのイベント記述場所について
□投稿者/ mashimo (9回)-(2024/02/23(Fri) 17:21:01)
魔界の仮面弁士さん

教えていただいた方法で対応してみます。
ありがございました。
解決済み
[ 親 102980 / □ Tree ] 返信 編集キー/


管理者用

- Child Tree -