【问题标题】:C#: How to deselect and defocus textbox?C#:如何取消选择和散焦文本框?
【发布时间】:2012-05-06 14:35:16
【问题描述】:

我正在用 C# WinForms 编写一个简单的基于计算的应用程序。我的问题是我有文本框来显示无法单击/聚焦的结果,因为按钮绑定到键盘。文本框必须有 ContextMenuStrip,但只有这个动作应该在文本框内处理。此外,此应用程序要求是它不能有任何可聚焦的控件。类似于 Windows 的 Calc 结果框。有什么建议吗?

【问题讨论】:

    标签: c# winforms textbox focus


    【解决方案1】:

    创建自定义文本框:

    public class TextBoxWithoutFocus : TextBox
    {
        private const int WM_SETFOCUS = 0x7;
    
        protected override void WndProc(ref Message m)
        {
            if (m.Msg == WM_SETFOCUS)
                return;
    
            base.WndProc(ref m);
        }
    }
    

    就是这样。文本框永远不会获得焦点(实际上它会获得焦点,但不会改变它的外观)。如果您想禁用用户输入,还可以考虑抑制 WM_CHAR 消息 (0x102)。

    更新(可以与按钮一起使用的技巧):

    public class ButtonWithoutFocus : Button
    {
        public ButtonWithoutFocus()
        {
            SetStyle(ControlStyles.Selectable, false);
        }
    }
    

    【讨论】:

      【解决方案2】:

      让它成为一个标签,而不是一个文本框。您可以设置尺寸和背景,使其看起来像一个文本框,并且具有 ContextMenuStrip。

      【讨论】:

        【解决方案3】:

        尝试TextBox.Enabled = False;TextBox1.ReadOnly = True;

        【讨论】:

          【解决方案4】:

          TextBox.Enabled = false 是否满足您的需求?

          【讨论】:

          • 不,我必须能够右键单击它显示菜单
          【解决方案5】:

          试试这个

          TextBox1.ReadOnly = True;
          

          【讨论】:

          • 焦点将始终在您的表单上进行某种控制,因此请执行 MyButton.Focus();
          【解决方案6】:

          散焦只需这样做:

          TextBox.Select(0, 0);
          

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2011-12-16
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2016-06-19
            • 1970-01-01
            相关资源
            最近更新 更多