teratail header banner
teratail header banner
質問するログイン新規登録

質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.30%
C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

イベントハンドラ

マウスのクリックなどの特定の事象(イベント)が発生した時に実行される処理のことをイベントハンドラと呼びます。

Q&A

解決済

1回答

253閲覧

C# メインフォームで発生するイベントを別のシートに書かれた関数に変えたい

turnberry0712

総合スコア9

C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

イベントハンドラ

マウスのクリックなどの特定の事象(イベント)が発生した時に実行される処理のことをイベントハンドラと呼びます。

1グッド

1クリップ

投稿2025/06/09 06:11

1

1

実現したいこと

移したい先の別シートには、メインフォーム以外の関数をまとめて書いております。
デザイン画面でアイテムをダブルクリックをすると自動でイベントができるようにうちではなっております。
ボタンを押したうえでやりたい事を自動で作られる関数ではなく、自分で書いた関数に変えたいです。
なぜならば、やりたい事を一つにまとめた関数にしたほうがやりやすいからと思ったからです。
思っているだけで、別の素敵な提案があればそちらにすると思います。

ボタンとチェックマークのイメージ画像
ボタンがクリックされた時に発生するイベント
本来やりたい関数を一つにまとめるためのシート画像

  • ボタンを押すとForm1の関数ではなく、Class1の関数を使うようにしたい。

前提

ここに質問の内容を詳しく書いてください。
(例)
ビジュアルベーシックでチェックボックスを押されたままボタンを押すか、
チェックボックスに触らずボタンを押すかでメッセージを表示させたい。

発生している問題・エラーメッセージ

エラーメッセージ

試したこと

C#でYahoo知恵袋の投稿を見たが、違う事柄であった。

補足情報(FW/ツールのバージョンなど)

ビジュアルベーシック2022で作成中。

TN8001👍を押しています

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

tamoto

2025/06/09 08:14

自動生成のメソッドはボタンとの紐付けなどが全て自動で行われていることで手間なく使えるので、どうしてもじゃなければ変えない方が楽だと思います。 呼び出し先がただの static メソッドで抽象化も何も考えなくて良い状況なら、単純に `button1_Click` の中身を `PressButtonFunction` を呼ぶだけにして、その実際の処理を `PressButtonFunction` に書けば目的が達成できそうに見えます。
fana

2025/06/10 02:39

何をどうしたいのかよくわからないけど,こういうのは標準的なやり方をそのまま使っとくに越したことは無いと思う. そこから逸脱した方法を採る時点ではまあ「そういうことをしたとわかってるから」良いのかもしれない(?)けれども それを後から見たときに「え? 何これどーなってんの? ふざけてんの?」とかなって無意味に余計な話が増えるだけな気がするので.
turnberry0712

2025/06/10 05:12

お二人ともありがとうございます。 自動的に生成される関数から自分のやりたい関数を呼び出した方が良いのですね。
guest

回答1

0

ベストアンサー

ボタンを押したうえでやりたい事を自動で作られる関数ではなく、自分で書いた関数に変えたいです。

デザイナを生かした上でとなると、部分クラス(partial)になっていないと動かないと思います(任意のクラスにはできない)

部分クラスで複数ファイルに分けて、定義ジャンプすることは可能です(新規のダブルクリックはForm1.csにできるが別のファイルに移せる)
C#(Visualstudio)でボタンクリックイベントを別ファイルに記述したい、でもデザイナーから飛びたい

思っているだけで、別の素敵な提案があればそちらにすると思います。

Windows Formsで1つのpartial classの中のコードが長いときの対処法

ユーティリティクラスだらけになるのも問題でしょうし、かといってWindows FormsでMVVMしたいかっていうと「う~~ん」となってしまう^^;
ユーティリティクラス アンチパターン - Google 検索
c# form mvvm - Google 検索

実際のところ皆さんどうしているんでしょうね。

投稿2025/06/09 10:15

TN8001

総合スコア10108

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

fana

2025/06/10 02:29

> 部分クラスで複数ファイルに分けて、定義ジャンプすることは可能です(新規のダブルクリックはForm1.csにできるが別のファイルに移せる) ダブルクリックするのではなくて, 分けた先のファイルにイベントハンドラを書いて→コントロールのプロパティからその書いたハンドラを選べば良いのではあるまいか? ……とか思ったのですが,これイベントハンドラを書く段階で「えっと,コレのシグネチャってどんな…?」ということになって,大変につらいですね. (それ以前に,分けたファイルを相応に認識させるためにプロジェクトファイルを手作業で編集する必要がある時点で…)
turnberry0712

2025/06/10 05:21

>部分クラスで複数ファイルに分けて、定義ジャンプすることは可能です(新規のダブルクリックはForm1.csにできるが別のファイルに移せる) すみません、この箇所がわかりませんでした。 >ユーティリティクラスだらけになるのも問題でしょうし、かといってWindows FormsでMVVMしたいかっていうと「う~~ん」となってしまう^^; ソースが長く、うーんとなっておりました。 結論は決まりました、ありがとうございます。 変更しない方が良いと思いました。
TN8001

2025/06/10 06:02

@fanaさん > 分けた先のファイルにイベントハンドラを書いて→コントロールのプロパティからその書いたハンドラを選べば良いのではあるまいか? 分けるだけならpartialになってさえいればいいですからね。 > ……とか思ったのですが,これイベントハンドラを書く段階で「えっと,コレのシグネチャってどんな…?」ということになって,大変につらいですね. 大体(object sender, EventArgs e)だったり、わかんなかったら一旦ダブルクリックしてもいいでしょう。 それよりもつらいのはボタンから実装に飛べない点だと思います。 大量に〇〇_Clickとかがあると、ファイルを分けたら余計探しにくくなりそうです^^; それともイベントハンドラはForm1.csで、Load・Saveを別ファイル?(2段にジャンプしなきゃだが) private void LoadButton_Click(object sender, EventArgs e) => Load(); private void SaveButton_Click(object sender, EventArgs e) => Save(); > (それ以前に,分けたファイルを相応に認識させるためにプロジェクトファイルを手作業で編集する必要がある時点で…) リンクの回答をした時にも調べたんですが、「File Nesting」って拡張機能があるんですが2022に未対応なんですよね... [File Nesting - Visual Studio Marketplace](https://marketplace.visualstudio.com/items?itemName=MadsKristensen.FileNesting) Madsさん的には「↓があるしもういらないんじゃね?」っていうスタンスなのかもしれませんが、 [ソリューション エクスプローラーのファイル入れ子規則 - Visual Studio (Windows) | Microsoft Learn](https://learn.microsoft.com/ja-jp/visualstudio/ide/file-nesting-solution-explorer) .filenesting.jsonうまく動かないんですよねぇ^^; 動いたとしても果たして定義ジャンプできるのかってのもあるし。 結局DependentUpon書くのが安全という結論でした。 「開発中は#regionとかでごまかしておいて、完成時にDependentUponで数ファイルに分ける」って感じの使い方がいいのかなぁ??
TN8001

2025/06/10 06:05 編集

@turnberryさん >> 部分クラスで複数ファイルに分けて、定義ジャンプすることは可能です(新規のダブルクリックはForm1.csにできるが別のファイルに移せる) > すみません、この箇所がわかりませんでした。 partial class(部分クラス)はひとつのクラスだけど複数のファイルに分けられるという機能です。 実際Form1.Designer.csのための機能というかそれを目的に導入されました。 [型の分割定義 (partial) - C# によるプログラミング入門 | ++C++; // 未確認飛行 C](https://ufcpp.net/study/csharp/misc/partial-type/) デザイナでダブルクリックするとForm1.csにイベントハンドラができますが、自分で別ファイルに作ったpartial classにイベントハンドラを移動してもコンパイルはできます。 下の動画でいうとPiyo.csの状態です。 https://teratail.com/questions/8knroxnez8kjw9 別ファイルに移動したイベントハンドラにデザイナのダブルクリックで移動できすようにするのは、ひと手間かかってしまうということです。 > 結論は決まりました、ありがとうございます。 👍
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.30%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問