【问题标题】:Is there a way to remove Alt-character shortcuts from controls at runtime?有没有办法在运行时从控件中删除 Alt 字符快捷键?
【发布时间】:2010-03-18 19:53:19
【问题描述】:

我有一个对话框,其中包含文本框/等标签上的许多 Alt-Letter 快捷方式。此对话框可以以可编辑或只读模式显示数据。如果对话框处于只读模式,我收到了隐藏快捷方式下划线的请求。除了在运行时编辑标签文本(呃)还有什么办法可以删除它们?

如果您不知道 alt-Letter 快捷键指的是什么,请参阅this 问题。

【问题讨论】:

    标签: c# winforms keyboard-shortcuts


    【解决方案1】:

    您可以只迭代控件并删除与号。例如:

    public partial class dlgSample : Form {
        public dlgSample(bool isReadOnly) {
            InitializeComponent();
            if (isReadOnly) ZapMnemonics(this.Controls);
        }
    
        private void ZapMnemonics(Control.ControlCollection ctls) {
            foreach (Control ctl in ctls) {
                if (ctl is Label || ctl is Button) ctl.Text = ctl.Text.Replace("&", "");
                ZapMnemonics(ctl.Controls);
            }
        }
    }
    

    【讨论】:

    • 我相信问题不在于移除它们,而是将它们放回之后。
    • @Jon S:如果对话框可以在不重新创建的情况下从只读模式更改为编辑模式,这只是一个问题。如果是这样,他可以保留一份原始标签列表。虽然很笨拙。
    • @nobugz 谢谢,但我最不想做的就是在我第一次忘记对两个对话框进行相同更改时给自己带来 CM 问题。
    • 什么是“CM 问题”?有什么变化?这只是一点代码。
    • @Jon Seigel 没有任何情况下我需要恢复它们,我只是希望有一个看起来不那么难看的实现,而不是递归地遍历 Controls 属性来追捕和踩在每个标签上个人。
    【解决方案2】:

    如果您更改 UseMnemonic 属性的值,则标签中会显示与号,因此我不确定您如何能够在不更改标签的情况下删除下划线。

    【讨论】:

      【解决方案3】:

      您可以尝试将表单的KeyPreview 属性设置为true,然后为表单的KeyDown 事件添加处理程序。如果按键是快捷键之一,则将KeyEventArgs 参数的Handled 属性设置为true。或者您可以将KeyEventArgs 变量的.SuppressKeyPress 属性设置为true

      您可以检查KeyEventArgs 变量的.Alt 属性以确保同时按下Alt 键。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2012-02-14
        • 1970-01-01
        • 2019-06-23
        • 1970-01-01
        • 1970-01-01
        • 2012-07-03
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多