如何在C#Winform中制作MS Paint中的透明文本框/类型工具?我不知道该怎么做

本文关键字:工具 类型 我不知道 透明 C#Winform MS Paint 文本 | 更新日期: 2023-09-27 17:59:03

我正在Winforms(C#)中开发一个类似MS paint的应用程序。形状和铅笔工具都完成了。有一件事我不知道该怎么做,那就是类型工具/文本框。如何在用户点击时(点击位置)显示动态透明文本框,就像我们在MS Paint中看到的那样。

因此,现在用户可以键入他想要的任何内容,并将保留在面板上。我发现了DrawString()方法,它可以在用户完成编辑后用于重新绘制。唯一的问题是,我不知道如何使文本框看起来像MS Paint(透明)。我尝试过使用Labels,但它们不可编辑,也不支持多行。文本框不是透明的。

非常感谢您的帮助!(仅供参考,此应用程序将与Lightshot等屏幕截图应用程序集成。我确实搜索了解决方案,但找不到任何合适的解决方案)

如何在C#Winform中制作MS Paint中的透明文本框/类型工具?我不知道该怎么做

此控件优于MS Paints透明文本框:http://www.codeproject.com/Articles/4390/AlphaBlendTextBox-A-transparent-translucent-textbo

Alex Fr在他的DrawTools文章中提供了一套优秀的绘图工具,这些工具是Draw Tool Redux的基础。在文章中,您可以看到该项目是基于MSPaint的代码作为C#的C++端口。

我在一个商业应用程序中用这些工具做了一个绘图工具,结果质量非常高

在DrawTools Redux项目的DrawArea.cs文件中,我进行了调整,为用户提供了一个透明的文本框:

public DrawToolType ActiveTool
{
    get { return activeTool; }
    set
    {
        if (activeTool == value) return;
        if (activeTool == DrawToolType.Text)
        {
            alphaBlendTextBox txt = null;
            foreach (var ctrl in Controls)
            {
                if (ctrl as alphaBlendTextBox!= null)
                {
                    txt = (alphaBlendTextBox)ctrl;
                    break;
                }
            }
            if (txt != null) ((ToolText)tools[(int)activeTool]).txt_Leave(txt, null);
        }
        activeTool = value;
    }
}

我也支持符号和着色,同样是DrawArea.cs:中的代码

public void InsertSymbol(string symbolSyntax)
{
foreach (var obj in Controls)
{
    if (obj as AlphaBlendTextBox.AlphaBlendTextBox != null)
    {
        var txt = ((AlphaBlendTextBox.AlphaBlendTextBox)obj);
        var selectionIndex = txt.SelectionStart;
        int value = int.Parse(symbolSyntax, System.Globalization.NumberStyles.HexNumber);
        symbolSyntax = char.ConvertFromUtf32(value).ToString();
        txt.Text = txt.Text.Insert(selectionIndex, symbolSyntax);
        txt.SelectionStart = selectionIndex + symbolSyntax.Length;
        break;
    }
}
Invalidate();
}
public void ApplyColorToSelected()
{
  int activeLayer = 0;
  foreach (var obj in TheLayers[activeLayer].Graphics.Selection)
  {
      obj.Color = LineColor;
  }
  foreach (var obj in Controls)
  {
      if (obj as AlphaBlendTextBox.AlphaBlendTextBox != null)
      {
          ((AlphaBlendTextBox.AlphaBlendTextBox)obj).ForeColor = LineColor;
      }
  }
  Invalidate();
}

我从那里得到的EyeDropper颜色选择器http://www.codeproject.com/Articles/36540/Adobe-Eyedropper-Control