25

私はグーグルとスタックオーバーフローで2時間検索しています。私が単に見落としている何かがなければなりません。メッセージボックスでテキストを選択可能にする簡単な方法はありますか? 現在、MessageBox.Show() を呼び出すと、表示されたテキストをコピーできません。なぜだめですか?テキストをコピーできるように設定するにはどうすればよいですか?

私のコード:

//catch all exceptions
        catch (Exception ex)
        {
            MessageBox.Show(ex.Message);
            //throw;
        }

表示されるエラー メッセージを選択できるようにして、ユーザーがそれを送信して問題をトラブルシューティングできるようにしたいと考えています。どんな助けでも大歓迎です。

編集: crtl-c メソッドは使用できません。私のユーザーはその概念を理解できません。マウスで強調表示し、右クリックしてオプションを選択する必要があります。ありがとう!

編集:参考までに、私が最終的に行ったことは、回答の混合物を使用することです。1 つのボタンでポップアップ ウィンドウを作成し、ボタン アクションをクリップボードにコピーしました。完璧ではありませんが、適切なラベルがあれば、今のところ十分に機能します。提案をありがとうございました!

//catch all exceptions
            catch (Exception ex)
            {
                //MessageBox.Show(ex.Message);
                MessageBoxButtons buttons = MessageBoxButtons.OK;
                DialogResult result;

                // Displays the MessageBox.

                result = MessageBox.Show(ex.Message + "\n\nClick OK button to copy to clipboard", "Error", buttons);

                if (result == System.Windows.Forms.DialogResult.OK)
                {

                    Clipboard.SetText(ex.Message);
                    //throw;

                }

            }
4

6 に答える 6

40

MessageBox にフォーカスがあるときにユーザーが押すCtrl-Cと、メッセージ、MessageBox キャプション、および MessageBoxButtons ラベルがクリップボードにコピーされます。

編集:メッセージをテキストファイルに出力して、メールで送信することはできますか? 簡単にするために、ファイルをデスクトップに置くことができます

于 2011-10-20T18:17:29.883 に答える
7

私がこれまで取り組んできたすべての実稼働システムで、エラー メッセージ、スタック トレース、スクリーン ショット、およびシステム情報をサポート メールに送信するためのボタンを備えたわかりやすいユーザー メッセージを含むカスタム ダイアログを作成します。

于 2011-10-20T18:27:29.813 に答える
7

次のようなコードを使用して、ユーザーが MessageBox を閉じた後または閉じる前に、MessageBox のテキストをクリップボードにコピーします。

var msg = "Hello world!";
MessageBox.Show(msg);
Clipboard.SetText(msg);

これは、ユーザーが簡単に理解できるようにする必要があります。

于 2011-10-20T18:27:14.130 に答える
1

MessageBox はウィンドウであり、ウィンドウがあるため、Windows API 関数を使用してそれらを見つけることができます。これらのインポートを見てください:

[DllImport("user32.dll", SetLastError = true)]

static extern IntPtr FindWindow(string lpClassName, string lpWindowName);

[DllImport("user32.dll", SetLastError = true)]

static extern IntPtr FindWindowEx(IntPtr hwndParent,
              IntPtr hwndChildAfter, string lpszClass, string lpszWindow);

[DllImport("user32.dll", CharSet = CharSet.Auto, SetLastError = true)]

static extern int GetWindowText(IntPtr hWnd, StringBuilder lpString, int nMaxCount);

MessageBox にタイトルを付けると、FindWindow を使用して検索できることに注意してください。返されたハンドルを FindWindowEx に渡すと、その子ウィンドウを見つけることができ、GetWindowText を使用するとそのテキストを読み取ることができます。 ソースの帰属

でも、メッセージの内容はもうわかりませんか?それを表示するには、そうしなければなりませんよね?

于 2016-08-11T14:50:36.360 に答える
1

私の知る限り、これは多くの時間尋ねられてきました。私が見つけた唯一の解決策は、メッセージ ボックスを選択してコピーし (コピーが取得されます)、貼り付けて貼り付けることができる場合です。素敵なフォーマットのような内容の内容...

デフォルトから、標準のメッセージ ボックスにはテキストを選択する方法がありません。

于 2011-10-20T18:16:29.463 に答える
1

この投稿から - MessageBox/Msgbox からテキストをコピー...

Ctrl-C を使用してメッセージボックスからメッセージをコピーできます。

また、MessageBox でメッセージのコピーを許可する方法 から、既定の Windows OS メッセージ ボックスのテキストにプログラムでアクセスすることはできません。そのためのカスタム コントロールが必要です。

于 2011-10-20T18:17:15.973 に答える