【发布时间】:2012-05-06 14:35:16
【问题描述】:
我正在用 C# WinForms 编写一个简单的基于计算的应用程序。我的问题是我有文本框来显示无法单击/聚焦的结果,因为按钮绑定到键盘。文本框必须有 ContextMenuStrip,但只有这个动作应该在文本框内处理。此外,此应用程序要求是它不能有任何可聚焦的控件。类似于 Windows 的 Calc 结果框。有什么建议吗?
【问题讨论】:
我正在用 C# WinForms 编写一个简单的基于计算的应用程序。我的问题是我有文本框来显示无法单击/聚焦的结果,因为按钮绑定到键盘。文本框必须有 ContextMenuStrip,但只有这个动作应该在文本框内处理。此外,此应用程序要求是它不能有任何可聚焦的控件。类似于 Windows 的 Calc 结果框。有什么建议吗?
【问题讨论】:
创建自定义文本框:
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);
}
}
【讨论】:
让它成为一个标签,而不是一个文本框。您可以设置尺寸和背景,使其看起来像一个文本框,并且具有 ContextMenuStrip。
【讨论】:
尝试TextBox.Enabled = False; 和TextBox1.ReadOnly = True;
【讨论】:
TextBox.Enabled = false 是否满足您的需求?
【讨论】:
试试这个
TextBox1.ReadOnly = True;
【讨论】:
散焦只需这样做:
TextBox.Select(0, 0);
【讨论】: