RichTextBox不显示文本

时间:2017-06-01 05:53:30

标签: c# richtextbox

我正在尝试从RichTextBox创建一个Bitmap并将其设置为面板的背景图像,但遗憾的是文本未显示。

Bitmap l_bitmap = new Bitmap(m_control.Width, m_control.Height);
m_control.DrawToBitmap(l_bitmap, new Rectangle(0, 0, l_bitmap.Width, l_bitmap.Height));
m_panel.BackgroundImage = l_bitmap;
m_panel.Refresh();

m_control是我的RichTextBox。当我调试时,我可以看到控件包含我写的文本,但位图只显示一个空的RichTextBox。

我对其他类型的控件使用相同的代码(Button,CheckBox,TextBox ...)。文本显示没有问题。

1 个答案:

答案 0 :(得分:0)

你正在尝试从控件创建一个位图。你放在那里的文字不是控件,所以它不会打扰它作为位图。尝试从屏幕创建图片(如屏幕截图)。

示例:

Graphics gr = Graphics.FromImage(l_bitmap);
gr.CopyFromScreen(m_control.PointToScreen(Point.Empty),  point.Empty, m_control.Size);

这将从您给定的点开始制作位图。这将另外显示文本。

修改

也许你可以使用它。除了你的想法,我只需在我的面板上贴一个标签。 (标签为L,面板为P) Data Access and Offline Sync

如您所见,标签为空,因为我清除了Text属性。现在,当您单击面板下方的其中一个按钮时,它将更新label.Text属性,并且将显示您为控件提供的文本。

以下是一些例子:

Screenshot from Form1 in Designermode

如您所见,标签显示控件的名称。完全自定义,您可以在我的源代码中看到:

public partial class Form1 : Form
{
    public Form1()
    {
        InitializeComponent();

    }

    public RichTextBox tmpRtf = new RichTextBox();

    //Poor button name incoming...
    private void button1_Click(object sender, EventArgs e)
    {
        if (tmpRtf == null)
            tmpRtf = new RichTextBox();

        //You can add any text here and it will be shown on the label.
        this.tmpRtf.Text = "Richtextbox";
        this.UpdatePanel(this.tmpRtf);
    }

    //Custom method to update the panel for any control. Can pobably be done way better than this, but hey.
    private void UpdatePanel(object pControl)
    {
        //Checks if control is a rtf
        if(pControl is RichTextBox)
        {
            //This is your code! Ay.
            Bitmap l_bitmap = new Bitmap(this.panel1.Width / 2, this.panel1.Height / 2);
            (pControl as RichTextBox).DrawToBitmap(l_bitmap, new Rectangle(0, 0, l_bitmap.Width, l_bitmap.Height));
            this.tmpRtf.BackColor = Color.LightGray;

            this.panel1.BackgroundImage = l_bitmap;
            this.panel1.BackgroundImageLayout = ImageLayout.Center;

            this.labelControlName.Text = this.tmpRtf.Text;

            this.panel1.Refresh();
        }
    }
}

无法在未可视化的控件上显示文本。但是你可以建立一个解决方法!或者,不是拍照,你可以简单地在它上面创建控件,也可以显示文本,也许用户可以测试它(例如,点击按钮,查看控件行为)。

希望这能让你受到启发,总有更多的方法可以实现。