【问题标题】:Additional text for ctrl+c keypressctrl+c 按键的附加文本
【发布时间】:2011-07-18 07:09:29
【问题描述】:

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

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

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

【问题讨论】:

  • 如果您无法获得满意的答案,您也许可以构建自己的消息框对话框来满足您的需求。我认为这并不难,因为消息框类有一个刻意的斯巴达式设计。

标签: .net wpf messagebox


【解决方案1】:

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

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

其他人建议创建自己的消息框表单并尝试模拟这种行为,但我强烈反对这样做。要正确处理 MessageBox API 实际上在幕后为您所做的所有小事情是非常困难的。

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

【讨论】:

  • 我现在正在使用 TaskDialog API(WindowsAPI 代码包)。感谢您指出!
【解决方案2】:

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

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

————————————

尖端技术

————————————

你好,托管世界!

————————————

好的

————————————

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

所以基本上你必须创建自己的消息框控件来控制文本如何发送到剪贴板。

【讨论】:

    【解决方案3】:

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

    编辑:

    看下面的例子:

    // 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(); 
    } 
    }
    

    【讨论】:

    • 不,你当然不能这样做。
    • 这适用于自定义控件,但无法继承或覆盖MessageBox控件以使用此代码。
    • MessageBox 不是“元素”。这个答案还是大错特错。请务必在回答之前阅读问题。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-06-03
    • 2015-01-10
    • 1970-01-01
    • 2015-05-13
    • 1970-01-01
    • 2011-06-09
    相关资源
    最近更新 更多