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

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

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

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

Visual Studio

Microsoft Visual StudioはMicrosoftによる統合開発環境(IDE)です。多種多様なプログラミング言語に対応しています。

VB.NET

Microsoft Visual Basic .NETのことで、Microsoft Visual Basic(VB6)の後継。 .NET環境向けのプログラムを開発することができます。 現在のVB.NETでは、.NET Frameworkを利用して開発を行うことが可能です。

Q&A

解決済

2回答

558閲覧

クラス内でのメッセージボックスについて

HoshiMizu

総合スコア17

C#

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

Visual Studio

Microsoft Visual StudioはMicrosoftによる統合開発環境(IDE)です。多種多様なプログラミング言語に対応しています。

VB.NET

Microsoft Visual Basic .NETのことで、Microsoft Visual Basic(VB6)の後継。 .NET環境向けのプログラムを開発することができます。 現在のVB.NETでは、.NET Frameworkを利用して開発を行うことが可能です。

1グッド

0クリップ

投稿2023/02/22 00:37

NETでクラスを作成しています。
メソッドでチェック処理を行い、問題があった際は、メッセージボックスを表示しようと考えています。

以下のどちらの方法が一般的でしょうか?

・メソッド内でメッセージボックスを表示する。

・メソッド内ではメッセージボックスは表示せずに、エラーコードを返して、呼び出し元でメッセージボックスを表示する。

ご回答のほど、宜しくお願いします。

fanaを押しています

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

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

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

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

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

退会済みユーザー

退会済みユーザー

2023/02/22 01:01

何を何で作っているかぐらい書きませんか。(例: Windows 10 の Visual Studio 2022 で Windows Forms アプリをターゲットフレームワーク .NET Framework 4.8 で作っています・・・とか) もう一つ、やりたいことを実現するために自分ではどこまでできていて、どこで躓いていて、何が分かれば解決できるかを、自分がやったことを書いて説明してください。丸投げは歓迎されません。 読んでください。 https://teratail.com/help/avoid-asking https://teratail.com/help/question-tips
退会済みユーザー

退会済みユーザー

2023/02/22 02:09

もう一つ、あなたの言う「問題」というのが何かをきちんと書いてください。 例えば、 予測可能で正しい業務フローに戻すことができるエラー(例:ユーザーの入力間違い)なのか、予測できないもしくは予測はできても何の対応もできない例外(例:DB サーバーダウン)なのかによって対応は異なるはずです。
Zuishin

2023/02/22 04:49

「一般的なもの」と「推奨されているもの」もまた違う可能性がありますし、フレームワークによっても事情が異なるので、詳細が不明な段階では何とも言えませんが、メッセージボックスを直接表示するのはあまり良い方法ではありません。 WPF で MVVM だと、メッセージボックスを出すメソッドを注入する、もしくはメッセンジャーを飛ばす、あるいはビヘイビアを導入する形が多く見られるのではないでしょうか。 いずれにせよ「メッセージボックスを表示する」という具体的な動作を「メッセージを出力する」という形に抽象化し、出力先をメッセージボックスとは限らずメモリやファイルや音声に容易に変更できるようにしたいものです。
Zuishin

2023/02/22 04:53

逆に、そこまでする必要もないほど小さなアプリであれば、どこでメッセージボックスを出しても構わないとも言えます。
guest

回答2

0

質問のコメントに対する返事がないので、あなたの言う「問題」は以下の (a) で、

(a) 予測可能で正しい業務フローに戻すことができる業務エラー(例:ユーザーの入力間違い)

(b) 予測できないもしくは予測はできても何の対応もできない例外(例:DB サーバーダウン)

正しい業務フローに戻すためのユーザーにメッセージ表示するのに「メッセージボックス」が適切というケースと勝手に想像して回答しておきます。想像が違ったらどこがどう違うのか書いてください。

以下のどちらの方法が一般的でしょうか?
・メソッド内でメッセージボックスを表示する。
・メソッド内ではメッセージボックスは表示せずに、エラーコードを返して、呼び出し元でメッセージボックスを表示する。

そこは、アプリ全体で考えてどこでどういうタイミングで表示するのが適切かとか、クラスの仕様書があればそれに従うとか、組織のコーディングルールによる、とかいう話になると思います。

そのあたりが分からない第三者(Teratail の回答者)が、どちらが良いとかとか、どちらが一般的かとか言えないはずです。

ご参考までに、上記 (a), (b) 両方を考えての .NET アプリのでの例外処理について、Microsoft Blog に書いてあったことを要約して以下に紹介しておきます(Blog は今はリンク切れです)。

(1) 上記 (a)「業務エラー」と (b)「例外」を区別して対処する。

(2) 「例外」はランタイムに拾わせてアプリケーションを停止させる。無かったことにして、ユーザが作業を続けられるようにすると、強制的に停止させるより好ましからざる状況に陥るかも(ユーザーが大事なデータを壊したりとか)。

(3) よほどのことがない限り try-catch は書かない。

(4) キャッチせざるを得ない場合でも Execption はキャッチしない。範囲を絞る。例えば DB 関係の例外が予測されるなら SqlException に限定して catch し、Number プロパティなどでエラーの内容を調べて対処するとか。

(5) 間違って補足してしまった例外は throw する。(注:catch ブロックでキャッチした例外を throw するとスタックトレースが途切れるので単に throw と書く)

(6) ユーザーへの通知が必要なら、集約的例外処置を利用する。

「業務エラー」についてはユーザー入力の間違いが原因ということが多いと思いますが、フレームワークにユーザー入力の検証機能が備わっている場合は、メッセージボックスとかは使わないで、フレームワークの機能を利用するというのが良さそうです。

投稿2023/02/22 04:27

退会済みユーザー

退会済みユーザー

総合スコア0

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

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

HoshiMizu

2023/02/22 05:35

ご回答ありがとうございました。
guest

0

ベストアンサー

そのクラスが何者なのか次第…かな,と.

そいつがGUIの一部なのであればそこでメッセージボックスを出しても良いだろうけど,
そうじゃない(内側の/純粋な処理実装の)存在であるなら,そいつが「メッセージボックスを出す実装」を持っているのは違う感.

投稿2023/02/22 01:16

fana

総合スコア11658

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

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

HoshiMizu

2023/02/22 03:55

ご回答ありがとうございました。
fana

2023/02/22 04:29 編集

要は,誰がエラーを「{今,メッセージボックスという手段で}表示する」ということを決めるべきなのか? みたいな話かと. --- ところで,何が「一般的」か? というような話であれば,もうちょっと(:複数の回答が来るまで)待ってみても良いのではなかろうか?
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問