在面板上绘制文本

3

好的,我调整了一下,现在正是我想要的结果。我有一个textBox1panel1drawTexta(一个按钮)。

当我点击按钮并在面板上选择一个点时,我希望从textBox1中绘制字符串。

private void panel1_Paint(object sender, PaintEventArgs e)
{
    using (SolidBrush br = new SolidBrush(Color.Red))
    {
        StringFormat sf = new StringFormat();
        sf.FormatFlags = StringFormatFlags.DirectionRightToLeft;
        e.Graphics.DrawString(textBox1.Text, this.Font, br, point1, sf);
    }
}

private void panel1_MouseDown(object sender, MouseEventArgs e)
{
    point1 = new Point(e.X, e.Y);
} 

bool flag = false;
Point point1 = new Point();

private void drawTexta_Click(object sender, EventArgs e)
{ 
    flag = true;
    panel1.Refresh();
}

使用文本框,然后在画布上绘制文本,这样不是更容易吗? - GolezTrol
我唯一知道的是,SolidBrush 会导致内存泄漏。 - Alvin Wong
@AlvinWong .net 处理垃圾回收。然而,使用 using 仍然是一个好的实践。 - Yatrix
1
@Yatrix 不,GDI+ 资源需要被正确释放(例如放在 using 块中),因为它们不会被垃圾回收。http://dotnetfacts.blogspot.com/2008/03/things-you-must-dispose.html - Alvin Wong
@GolezTrol,你能否给我关于添加文本框的更多信息吗?OnMouseDown是创建文本框的方法吗?我也使用了using。 - Bor
@AlvinWong,谢谢你教给我新的东西。 - Yatrix
1个回答

3

文本没有被绘制到panel1,因为您需要刷新它。

在将drawText设置为true后,在button1_Click中添加此代码:

panel1.Refresh();

那将使静态文本显示出来。

1
我刚学到RefreshInvalidateUpdate的组合。http://blogs.msdn.com/b/subhagpo/archive/2005/02/22/378098.aspx - Alvin Wong

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接