Câu hỏi c # chọn văn bản từ cửa sổ bật lên messagebox.show


Tôi đã tìm kiếm trên google và stackoverflow trong 2 giờ. Phải có một cái gì đó tôi chỉ đơn giản là nhìn ra. Có cách nào dễ dàng để làm cho văn bản có thể lựa chọn trong một hộp thư không? Ngay bây giờ khi tôi gọi một MessageBox.Show () tôi không thể sao chép văn bản được hiển thị. Tại sao không? làm thế nào tôi có thể thiết lập các văn bản được sao chép có thể?

ma cua toi:

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

Tôi muốn có thể chọn thông báo lỗi xuất hiện để người dùng có thể gửi cho tôi và tôi có thể khắc phục sự cố của họ. Bất kỳ trợ giúp nào cũng được đánh giá rất cao.

EDIT: Không thể sử dụng phương pháp crtl-c. Người dùng của tôi không thể nắm bắt khái niệm đó. Cần làm nổi bật bằng chuột và nhấp chuột phải để chọn tùy chọn. Cảm ơn bạn!

EDIT: Để tham khảo những gì tôi đã kết thúc làm là sử dụng một hỗn hợp của các câu trả lời. Tôi tạo ra một cửa sổ popup với một nút duy nhất và khi hành động nút tôi sao chép vào clipboard. Nó không hoàn hảo nhưng với đúng nhãn hiệu nó hoạt động tốt cho đến bây giờ. Cảm ơn tất cả các bạn cho ý kiến!

//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;

                }

            }

19
2017-10-20 18:11


gốc


Nếu người dùng nhấp vào Ctrl-C khi MessageBox có tiêu điểm, thông báo, chú thích hộp thư và nhãn nút được sao chép vào khay nhớ tạm. - Nasreddine
@Nacereddine bạn khá chính xác. Tuy nhiên, người dùng của tôi hiện không hiểu rằng đó là một tùy chọn có thể và muốn văn bản trở nên nổi bật và có thể sao chép :( - toosweetnitemare
Bạn cần một MessageBox tùy chỉnh. Có một số liên kết được cung cấp trong câu trả lời sau: stackoverflow.com/questions/4704839/custom-messagebox/… - Nasir
@toosweetnitemare Bạn có thể xuất các tin nhắn vào một tập tin văn bản và để chúng gửi email cho bạn? để dễ dàng hơn, bạn có thể đặt tệp trên máy tính để bàn của họ. - Nasreddine
@Nacereddine đó là một ý tưởng tuyệt vời. Mặc dù tôi nghĩ rằng bệnh chỉ cần thêm một nút để bật lên mà nói sao chép tin nhắn và sao chép nó vào clipboard cho họ khi bấm nút. Bạn có thể thêm câu trả lời của bạn vào danh sách câu trả lời và bệnh sẵn sàng cung cấp cho bạn tín dụng cho đề xuất này. - toosweetnitemare


Các câu trả lời:


Nếu người dùng nhấn Ctrl-C trong khi MessageBox có tiêu điểm, thông báo, chú thích MessageBox và nhãn MessageBoxButtons được sao chép vào khay nhớ tạm.

Chỉnh sửa: Bạn có thể xuất các tin nhắn vào một tập tin văn bản và gửi chúng cho bạn? để dễ dàng hơn, bạn có thể đặt tệp trên máy tính để bàn của họ


29
2017-10-20 18:17



Một gợi ý Windows không được biết đến, trong khi nó có thể rất tiện dụng. - Otiel
Tạo tệp trên màn hình có thể không khả dụng do quyền của người dùng nếu chạy dưới UAC - mgttlinger


Tôi sẽ sao chép văn bản MessageBox của bạn vào clipboard sau hoặc trước khi người dùng đóng MessageBox bằng cách sử dụng mã như thế này:

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

Điều này sẽ dễ dàng đủ để người dùng của bạn hiểu.


7
2017-10-20 18:27



Điều đó không có tác dụng với tôi. String message = "There is no Host to ping. Please enter hostname/ip into Field."; MessageBox.Show(message); Clipboard.SetText(message); dường như không sao chép vào clipboard - toosweetnitemare
@toosweetnitemare Không ai thích nghe điều này, nhưng mã của bạn hoạt động trên máy tính của tôi. Sau khi chạy nó, tôi có thể dán tin nhắn của bạn vào Notepad. Tôi đã thấy một người nào đó nói rằng họ có cùng một vấn đề bạn đang gặp phải trên một máy tính Windows 7. Sửa lỗi của họ là gọi mã này trước khi gọi SetText (): Clipboard.Clear(); - Jay Riggs
Cũng rất đúng. Tôi ghét nghe "nó hoạt động tốt trên máy của tôi" haha ​​Cảm ơn bạn đã gợi ý Clipboard.Clear(); Tôi chỉ mới bắt đầu chơi xung quanh với các tùy chọn của Clipboard. Đề xuất của bạn hoạt động tuyệt vời, nhưng để tham khảo, tôi cũng có Clipboard.SetDataObject(message, true); Cảm ơn sự giúp đỡ của bạn! - toosweetnitemare
Đây là một ý tưởng khủng khiếp. Bạn không bao giờ nên mù quáng ghi đè lên những gì người dùng có trong clipboard của họ mà không hỏi họ trước; bạn không biết tầm quan trọng của nó hay không. - Dan Bechard


Trên tất cả các hệ thống sản xuất mà tôi từng làm việc, chúng tôi tạo một hộp thoại tùy chỉnh có thông báo người dùng thân thiện với một nút để gửi email thông báo lỗi, theo dõi ngăn xếp, ảnh chụp màn hình và thông tin hệ thống đến email hỗ trợ.


6
2017-10-20 18:27



Vào cuối QA này, bạn có thể thấy việc thực hiện điều này, với Nhật ký hành động người dùng được bao gồm trong email hỗ trợ: stackoverflow.com/questions/30326673/… - Jeremy Thompson


Theo như tôi biết, Điều này đã được hỏi rất nhiều thời gian, và giải pháp duy nhất tôi tìm thấy nếu bạn có thể chọn hộp tin nhắn, sao chép nó (nó sẽ nhận được bản sao), và sau đó bạn có thể dán nó, và nó sẽ dán các nội dung trong một cái gì đó giống như một định dạng đẹp ...

Từ mặc định, hộp thông báo chuẩn không có cách nào để chọn văn bản.


1
2017-10-20 18:16



Cảm ơn. đó là điều tôi sợ ... - toosweetnitemare


Từ bài đăng này - Sao chép văn bản từ MessageBox / Msgbox...

bạn có thể sử dụng Ctrl-C để sao chép thư từ một hộp thư.

Và từ Cách cho phép sao chép tin nhắn trên MessageBox, bạn không thể truy cập chương trình văn bản trong hộp thông báo Windows OS mặc định. Bạn sẽ cần một điều khiển tùy chỉnh cho điều đó.


1
2017-10-20 18:17





MessageBox là một cửa sổ và có một cửa sổ, vì vậy bạn có thể sử dụng các cửa sổ api chức năng để tìm chúng. Nhìn vào các hàng nhập khẩu này:

[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);

Lưu ý rằng nếu bạn đặt cho MessageBox một tiêu đề, nó có thể sử dụng FindWindow để tìm nó. Việc truyền xử lý được trả về vào FindWindowEx cho phép bạn tìm thấy cửa sổ con của nó và GetWindowText sẽ cho phép bạn đọc văn bản đó. Thuộc tính nguồn

Nhưng bạn chưa có nội dung của tin nhắn chưa? Bạn sẽ phải có để hiển thị nó, phải không?


1
2017-08-11 14:50