C# 如何自动检测绘制事件I';我在用什么?
例如,我有C# 如何自动检测绘制事件I';我在用什么?,c#,winforms,C#,Winforms,例如,我有Form1paint事件: private void Form1_Paint(object sender, PaintEventArgs e) { TextDrawer draw = new TextDrawer(e.Graphics,this,8.25); } 在新类TextDrawer中,我需要输入控件名称,在本例中为form1,因此我键入: 这是一个新类: class TextDrawer { private readonly Graphics g;
Form1
paint事件:
private void Form1_Paint(object sender, PaintEventArgs e)
{
TextDrawer draw = new TextDrawer(e.Graphics,this,8.25);
}
在新类TextDrawer
中,我需要输入控件名称,在本例中为form1,因此我键入:
这是一个新类:
class TextDrawer
{
private readonly Graphics g;
private readonly Control c ;
private readonly double font_size;
public TextDrawer(Graphics g,Control c,
double font_size)
{
this.g = g;
this.c = c;
this.font_size = font_size;
}
public void DrawText(string text,Color pen_color,Color brushes_color, Point point1, Point point2, Point point3)
{
c.Font = new Font(c.Font.FontFamily.Name, (float)font_size);
SolidBrush brush = new SolidBrush(brushes_color);
using (Pen pen = new Pen(pen_color, 10f))
{
Point pt1 = point1;
Point pt2 = point2;
g.DrawLine(pen, point1, point2);
}
g.DrawString(text,
c.Font, brush, point3);
}
}
我想知道,一旦我在任何控件的paint事件中键入,它的form1 pictureBox1标签就是任何在我为该类创建新实例后具有paint事件的控件,例如:
TextDrawer draw = new TextDrawer(e.Graphics,8.25);
新类将自动检测/查找控件名称,这样用户就不需要输入:this或pictureBox1或label1
有什么办法吗?例如,在文本框的
TextChanged
事件中,您可以将sender
参数作为控件传递
private void YourTextBoxOne_TextChanged(object sender, EventArgs e)
{
TextBoxTextChanged((TextBox)sender);
}
private void YourTextBoxTwo_TextChanged(object sender, EventArgs e)
{
TextBoxTextChanged((TextBox)sender);
}
private void TextBoxTextChanged(TextBox tb)
{
var draw = new TextDrawer(tb, 8.25);
//Do something
}
您的
TextDrawer
类将控件作为构造函数参数。它有一个“名称”和一个“文本”属性。选择适合你需要的。您到底想对控件名做什么?你真的是指控件名还是控件文本?这就是我的意思:textDraw=newtextDrawer(e.Graphics,((控件)发送器),8.25);在新类中,我可以使用它来更改当前控件的属性。现在我可以将整个代码复制到另一个控件的另一个paint事件,而无需修改控件名称。不是字符串名,而是控件名。这是个不错的主意。特别是重新指定控件字体属性的部分。