Смотрите мой код ниже. Здесь код не работает: person[i].Pic, потому что i неизвестен.

Как передать индекс i методу PrintPage()?

private void BtnPrint_Click(object sender, EventArgs e)
{            
    for (int i = 0; i < persons.Count(); i++)
    {
        PrintDocument pd = new PrintDocument();
        pd.PrintPage += PrintPage;
        pd.Print();
    }
}

private void PrintPage(object o, PrintPageEventArgs e)
{            
    System.Drawing.Image img = System.Drawing.Image.FromFile(person[i].Pic);
    Point loc = new Point(400, 100);
    e.Graphics.DrawImage(img, loc);

}
0
piccus 18 Июл 2017 в 09:49
Использовать анонимный метод?
 – 
Uwe Keim
18 Июл 2017 в 09:50
Вы добавляете их как события и получаете доступ к глобальному person ... не знаю, что вы пытаетесь сделать, но это звучит как плохой дизайн
 – 
EpicKip
18 Июл 2017 в 09:52
О, кстати, я рекомендую изменить persons на Persons, чтобы вы знали, что это не локальная переменная (паскальский регистр)
 – 
EpicKip
18 Июл 2017 в 09:54

1 ответ

Лучший ответ

Как насчет чего-то вроде этого:

private void BtnPrint_Click(object sender, EventArgs e)
{            
    for (int i = 0; i < persons.Count(); i++)
    {
        PrintDocument pd = new PrintDocument();

        pd.PrintPage += 
            delegate(object o, PrintPageEventArgs e)
            {            
                var img = System.Drawing.Image.FromFile(person[i].Pic);
                Point loc = new Point(400, 100);
                e.Graphics.DrawImage(img, loc);
            };

        pd.Print();
    }
}

Т.е. используйте анонимный метод , у которого есть доступ к внешней переменной i.

1
Uwe Keim 18 Июл 2017 в 09:51