gpt4 book ai didi

c# - DrawString自定义控件文本在winforms C#中不显示

转载 作者:太空宇宙 更新时间:2023-11-03 19:52:19 26 4
gpt4 key购买 nike

我创建了一个自定义控件并将其绑定(bind)到表单。我在控件中绘制图形文本并添加到窗体中。但它没有显示表格。这是我的代码。

//创建自定义控件

 public class DrawTextImage : Control
{

public void DrawBox(PaintEventArgs e, Size size)
{
e.Graphics.Clear(Color.White);
int a = 0;
SolidBrush textColor = new SolidBrush(Color.Black);
using (SolidBrush brush = new SolidBrush(Color.Red))
{

e.Graphics.FillRectangle(brush, new Rectangle(a, a, size.Width, size.Height));
e.Graphics.DrawString("Text", Font, textColor, new PointF(50, 50));
}
}
}

//加载Form1

public Form1()
{
InitializeComponent();

DrawTextImage call = new DrawTextImage();
call.Text = "TextControl";
call.Name = "TextContrl";
Size siz = new Size(200, 100);
call.Location = new Point(0, 0);
call.Visible = true;
call.Size = siz;
call.DrawBox(new PaintEventArgs(call.CreateGraphics(), call.ClientRectangle), siz);
this.Controls.Add(call);
}

关于这方面的任何帮助,我做错了什么?

最佳答案

您应该使用控件自己的 Paint 事件,而不是必须手动调用的自定义方法。

public class DrawTextImage : Control
{
protected override void OnPaint(PaintEventArgs e)
{
e.Graphics.Clear(Color.White);
int a = 0;
SolidBrush textColor = new SolidBrush(Color.Black);
using (SolidBrush brush = new SolidBrush(Color.Red))
{
//Note: here you might want to replace the Size parameter with e.Bounds
e.Graphics.FillRectangle(brush, new Rectangle(a, a, Size.Width, Size.Height));
e.Graphics.DrawString("Text", Font, textColor, new PointF(50, 50));
}
}
}

删除对DrawBox的调用,这是不必要的。

只要需要重绘控制面,就会自动触发 Paint 事件。您可以使用控件的 Invalidate()Refresh() 方法在代码中自行请求。

关于c# - DrawString自定义控件文本在winforms C#中不显示,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37460335/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com