我在GUI中编辑Label时遇到了问题所以我决定使用BackColor将该标签转换为文本框,因为背景必须使其看起来与标签完全一样,但是在关注该文本框后会出现闪烁的光标。这是非常难看的&我发现的唯一方法是将属性Enabled设置为false,但是我还需要从该文本框中执行doubleclick&只需点击一下。因此,如果未启用控件,则不会对双击做出反应。
基本上我希望默认情况下将该文本框表示为标签,直到它被点击一次,如果双击,则执行某些功能只会重写其他文本框的文本属性。因此,如果单击一次,我想使文本框看起来像文本插入的文本框,光标闪烁。按Enter后,它将再次变换为'假'标签,焦点后光标不会闪烁。
这可能吗?
P.S。我很抱歉这个副本,但我无法理解如何实现f.e. [DllImport("user32")]
它用红线标出'DllImport',评论为:
The type or namespace 'DllImport' could not be found.
详述:
Error 1 The type or namespace name 'DllImport' could not be found (are you missing a using directive or an assembly reference?) C:\Users\**\Visual Studio 2013\Projects\Práce\Rozvržení práce\Rozvržení práce\Form1.cs 17 10 Rozvržení práce
Error 2 The type or namespace name 'DllImportAttribute' could not be found (are you missing a using directive or an assembly reference?) C:\Users\**\Visual Studio 2013\Projects\Práce\Rozvržení práce\Rozvržení práce\Form1.cs 17 10 Rozvržení práce
(实施 [System.Runtime.InteropServices.DllImport("user32")]
代替= D - Sinatr)
如何再次设置闪烁光标?我想通过编辑static extern bool HideCaret(IntPtr hWnd);
,但是怎么做?
答案 0 :(得分:1)
它被称为“插入符号”。它仅在TextBox获得焦点时显示。但是,由于您不希望用户更改任何内容,因此让它获得焦点也没有意义。因此,简单的解决方法是打败聚焦尝试。在项目中添加一个类并粘贴下面显示的代码。编译并将其从工具箱顶部拖放到表单上。
using System;
using System.Windows.Forms;
class TextBoxLabel : TextBox {
public TextBoxLabel() {
this.SetStyle(ControlStyles.Selectable, false);
this.TabStop = false;
}
protected override void WndProc(ref Message m) {
// Workaround required since TextBox calls Focus() on a mouse click
// Intercept WM_NCHITTEST to make it transparent to mouse clicks
if (m.Msg == 0x84) m.Result = IntPtr.Zero;
else base.WndProc(ref m);
}
}