ctrl + c keypress的附加文本

时间:2011-07-18 07:09:30

标签: .net wpf messagebox

与大多数MessageBox一样,如果用户在显示MessageBox时按下CTRL + C,WPF MessageBox会将其所有内容(标题,文本,按钮)复制到剪贴板。到目前为止一切都很好。

现在我想提供其他信息,但仅提供给剪贴板,而不是MessageBox本身。有谁知道我会怎么做?

System.Windows.MessageBox.Show(this, "The Message", "MsgBox Caption", MessageBoxButton.OK, MessageBoxImage.Information);

3 个答案:

答案 0 :(得分:1)

来自:http://msdn.microsoft.com/en-us/magazine/cc188920.aspx

  

替换静态文本呈现对话框的消息   通过静态类的窗口。 .NET Framework对应物   一个Win32静态窗口是Label类。显示的文字   通过静态控制窗口不能用鼠标选择。至   部分解决了这种行为,使用Windows 2000,Microsoft   介绍了一个鲜为人知的功能,以简化复制任务   文本显示在标准消息框中的剪贴板。尝试   显示消息框窗口时按Ctrl + C.接下来,冲洗   使用Ctrl-V将剪贴板的内容添加到文本框控件中。为了   示例窗口如图1所示,您将得到以下文本:

     

-------------

     

前沿

     

-------------

     

您好,托管世界!

     

-------------

     

好的

     

-------------

     

该文本包含消息以及窗口标题和   按钮文字。该功能取决于操作系统,不能   以编程方式控制。如果要在视觉上选择文本   要复制到剪贴板,除了替换之外别无他法   带有无边框只读编辑控件的静态控件。

所以基本上你必须创建自己的消息框控件来控制文本发送到clipbord的方式。

答案 1 :(得分:1)

当然!只需将要复制的任何文本添加到消息框中即可!

没有任何理由想要以任何其他方式这样做。即使有,也不可能。这不是WPF中实现的; Win32 MessageBox API在内部执行。没有按钮或开关来配置它的工作原理。

其他人建议创建自己的消息框表单并尝试模拟这种行为,但我非常反对这一点。很难找到MessageBox API在幕后为您实际做的所有小事情。

更好的解决方案是升级到TaskDialog API,并在对话框中添加“更多信息”按钮,该对话框会显示一个面板,显示有关该消息的其他信息。用户已经熟悉这种对话框,因为它在操作系统的当前版本内部使用。您偏离平台惯例的次数越少,您的用户就会越快乐。

答案 2 :(得分:-1)

在我看来,您无法更改剪贴板中的内容,但您可以通过触发组合键来更改复制前的内容。

编辑:

见下面的例子:

// Ctrl + C 
if ((Keyboard.Modifiers == ModifierKeys.Control) && (e.Key == Key.C)) { 
ProcessSaveCommand(); 
} 

您必须将keydown事件绑定到您的元素,并且可以处理如上所示的数据。

<TextBox KeyDown="KeyDownEventHandler" />

private void KeyDownEventHandler(object sender, KeyEventArgs e)
{
// Ctrl + C 
if ((Keyboard.Modifiers == ModifierKeys.Control) && (e.Key == Key.C)) { 
ProcessSaveCommand(); 
} 
}