私はグーグルとスタックオーバーフローで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;
}
}
ユーザーがCtrl-C
MessageBoxにフォーカスがある間、メッセージ、MessageBoxキャプション、およびMessageBoxButtonsラベルがクリップボードにコピーされます。
編集:メッセージをテキストファイルに出力して、メールで送信することができますか?物事を簡単にするために、あなたは彼らのデスクトップにファイルを置くことができます
私がこれまで取り組んだすべての本番システムで、エラーメッセージ、スタックトレース、スクリーンショット、およびシステム情報をサポートメールに電子メールで送信するボタンを備えたわかりやすいユーザーメッセージを含むカスタムダイアログを作成します。
次のようなコードを使用して、ユーザーがメッセージボックスを閉じる前または閉じる前に、メッセージボックスのテキストをクリップボードにコピーします。
var msg = "Hello world!";
MessageBox.Show(msg);
Clipboard.SetText(msg);
これは、ユーザーが理解するのに十分簡単なはずです。
私の知る限り、これは何度も尋ねられましたが、メッセージボックスを選択してコピー(コピーされる)して、貼り付けることができれば、唯一の解決策が見つかりました。ニース形式のような内容...
デフォルトから、標準メッセージボックスにはテキストを選択する方法がありません。
この投稿から- MessageBox/Msgboxからテキストをコピー ...
ctrl-Cを使用して、メッセージボックスからメッセージをコピーできます。
そして MessageBoxでメッセージのコピーを許可する方法 から、デフォルトのWindows OSメッセージボックスのテキストにプログラムでアクセスすることはできません。そのためのカスタムコントロールが必要になります。
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を使用すると、そのテキストを読み取ることができます。 ソース属性
しかし、メッセージの内容はもうありませんか?表示するために必要なんだよね?