我正在尝试从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 ...)。文本显示没有问题。
答案 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
属性,并且将显示您为控件提供的文本。
以下是一些例子:
如您所见,标签显示控件的名称。完全自定义,您可以在我的源代码中看到:
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();
}
}
}
无法在未可视化的控件上显示文本。但是你可以建立一个解决方法!或者,不是拍照,你可以简单地在它上面创建控件,也可以显示文本,也许用户可以测试它(例如,点击按钮,查看控件行为)。
希望这能让你受到启发,总有更多的方法可以实现。