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事件,而无需修改控件名称。不是字符串名,而是控件名。这是个不错的主意。特别是重新指定控件字体属性的部分。