C#: 如何取消选择和失焦文本框?

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

4
创建自定义文本框:
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。


1
尝试使用 TextBox.Enabled = False;TextBox1.ReadOnly = True; 两种方式。

0

试试这个

TextBox1.ReadOnly = True;

始终将焦点集中在表单上,因此请执行类似于 MyButton.Focus() 的操作。 - Likurg

0

要简单地取消焦点,请执行以下操作:

TextBox.Select(0, 0);

0

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


不行,我必须能够右键点击它并显示菜单。 - Darj

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接