c#如何在单击时使文本框可编辑且不可编辑?透明标签怎么样?

时间:2015-11-30 23:37:06

标签: c# .net winforms visual-studio

我希望文本框显示为禁用,并显示一个数字。

enter image description here

所以我给它一个黑暗的背景,我希望它没有光标。我希望它不可编辑。但我也希望它可以点击。

但是当它被点击时,我希望它具有白色背景颜色,并且可以编辑。

我知道如何改变颜色。

我的问题是,当我将文本框的可编辑属性设置为false时,单击它的方法不会被触发。

解决方法是在其顶部放置透明标签。然后可以点击(当点击它时我可以禁用并启用文本框)。但我不知道如何制作透明标签。我尝试了一个标签,其中可见设置为false,但也无法点击。

enter image description here

2 个答案:

答案 0 :(得分:1)

创建一个包含文本框位置和大小的标签。将边框,背景等设置为禁用的文本框。确保文本框z-order位于顶部(Bring to Front),并将其visible属性设置为false。

  • 在标签的点击处理程序中,将文本框的可见性设置为true。
  • 在文本框的TextChange处理程序上,将标签Text属性设置为等于文本框的Text属性。
  • 在文本框的LostFocus处理程序中,将文本框的可见性设置为false。

答案 1 :(得分:0)

处理文本框的MouseDown事件及其父级的mousedown事件。如果文本框被禁用, MouseDown事件将由父处理。丁!

我假设父母是一个名为Form1的表单。如果直接父母是专家组或其他什么,表格将无论如何都会得到该事件。但你可以很容易地解决这个问题。

private void textBox1_MouseDown(object sender, MouseEventArgs e)
{
    (sender as TextBox).Enabled = !(sender as TextBox).Enabled;
}

private void Form1_MouseDown(object sender, MouseEventArgs e)
{
    var rect = RectangleToClient(textBox1.RectangleToScreen(textBox1.ClientRectangle));

    if (rect.Contains(e.Location))
    {
        textBox1.Enabled = !textBox1.Enabled;

        //  I added this because it felt very wrong for the TextBox not 
        //  to gain focus when I enable-clicked it. I think you'll agree.
        if (textBox1.Enabled)
        {
            textBox1.Focus();
        }
    }
}

建议你尝试WPF的人是对的;它常常很痛苦,但最终它会非常好。我现在讨厌回到WiFo。但是如果你需要使用当前的代码库来完成这项功能,那么这个可能会很糟糕的kludge会让你在那里。