C# 打印不在列表中的页面

C# 打印不在列表中的页面,c#,printdocument,C#,Printdocument,我有一个int列表,其中包含我不想打印的页面 让我们称之为skipPages 当我试图将实际的打印部分放入if(skipPages.IndexOf(currentPage)时,会为每个页面触发PrintPage事件,因此您所要做的就是跳过列表中的currentPage 您还需要一种机制来检查最后几页是否在跳过列表中,以避免最后打印空白页 List<int> skipPages = new List<int> { 2, 5, 6 }; private void print

我有一个
int
列表,其中包含我不想打印的页面

让我们称之为
skipPages


当我试图将实际的打印部分放入
if(skipPages.IndexOf(currentPage)时,会为每个页面触发PrintPage事件,因此您所要做的就是跳过列表中的
currentPage

您还需要一种机制来检查最后几页是否在跳过列表中,以避免最后打印空白页

List<int> skipPages = new List<int> { 2, 5, 6 };

private void printDocument1_BeginPrint(object sender, PrintEventArgs e)
{
    currentPage = 0;
}

public void printPage(object sender,System.Drawing.Printing.PrintPageEventArgs e)
{
    bool f = false;
    int c = currentPage + 1;

    //Mechanism to check for the last few pages.
    while(skipPages.IndexOf(c)>=0) c++;
    if(c>=totalPages) f=false;
    else f=true;

    while(skipPages.IndexOf(currentPage)>=0) currentPage++; //Actual skipping part.
    if(currentPage<totalPage-1) e.HasMorePages = f;
    else e.HasMorePages = false;
    e.Graphics.DrawString(
         currentPage.ToString(),
         new Font("Times New Roman",12),
         new SolidBrush(Color.Black),
         new Point(10,10));
    currentPage++;
}
List skipPages=新列表{2,5,6};
私有void printDocument1_BeginPrint(对象发送方,PrintEventArgs e)
{
currentPage=0;
}
public void printPage(对象发送方,System.Drawing.Printing.PrintPageEventArgs e)
{
bool f=假;
int c=当前页面+1;
//检查最后几页的机制。
(IndexOf)(C)> 0(C++);
如果(c>=totalPages)f=false;
否则f=真;
while(skipPages.IndexOf(currentPage)>=0)currentPage++;//实际跳过部分。

如果(currentPageHi PiggyChu515,欢迎来到StackOverflow。你能发布相关代码吗,因为我们没有太多要做的。我想这个链接会很有帮助@Francis:我添加了代码,希望它会有帮助!@Alireza:这个例子教我如何打印一系列页面,这不是我正在尝试的。我尝试跳过页面,可能是第2、5、6页o页r 4,7,12,14,15,19。不过还是要谢谢你!PrintPage事件会针对每一页触发。如果你不绘制任何东西,那么你会得到一个空白页。因此,你必须增加currentPage变量以获得你确实想要打印的页。这使得e.HasMorePages的正确设置有点棘手,正确设置的最好方法是提前进行测试,star正在处理BeginPrint事件。您没有得到正确的结果。想象一下,当第一页或最后一页位于skipPages列表中时会发生什么情况。e.HasMorePages赋值需要在该while循环之后完成,这样您就不会得到额外的空白页。而且您确实也需要BeginPrint事件,这两个事件都可以重置currentPage变量ba选中0并使其超出任何跳过的页面。因此skipPages变量不能是局部变量,请将其移出方法。我更新了它!请检查我是否正确!谢谢!我认为编辑代码段可能更容易。完成。谢谢!但是如果您将
while
循环放入
BeginPrint
,是否仍然需要d是否将其放入
打印页
!?
public void printPage(object sender, System.Drawing.Printing.PrintPageEventArgs e)
{
    List<int> skipPages = new List<int> { 2, 5, 6 };
    if(currentPage<totalPage && skipPages.IndexOf(currentPage)<0) e.HasMorePages = true;
    else e.HasMorePages = false;

    e.Graphics.DrawString(
        currentPage.ToString(),
        new Font("Times New Roman",12),
        new SolidBrush(Color.Black),
        new Point(10,10));
    currentPage++;

}
List<int> skipPages = new List<int> { 2, 5, 6 };

private void printDocument1_BeginPrint(object sender, PrintEventArgs e)
{
    currentPage = 0;
}

public void printPage(object sender,System.Drawing.Printing.PrintPageEventArgs e)
{
    bool f = false;
    int c = currentPage + 1;

    //Mechanism to check for the last few pages.
    while(skipPages.IndexOf(c)>=0) c++;
    if(c>=totalPages) f=false;
    else f=true;

    while(skipPages.IndexOf(currentPage)>=0) currentPage++; //Actual skipping part.
    if(currentPage<totalPage-1) e.HasMorePages = f;
    else e.HasMorePages = false;
    e.Graphics.DrawString(
         currentPage.ToString(),
         new Font("Times New Roman",12),
         new SolidBrush(Color.Black),
         new Point(10,10));
    currentPage++;
}