2015-08-27 55 views
0

這是一個PDFSharp問題,但我認爲它更符合vb.net中對象引用的工作方式。使用方法來更改對象參考值

所以我有一些代碼,看起來像這樣:

Dim page as PdfPage = pdf1.AddPage() 
Dim graphics as XGraphics = XGraphics.FromPdfPage(pdfPage) 

因此,這會自然地產生的圖形XGraphics和PdfPage對象,我需要。

現在,當我需要的網頁添加到我創建的PDF文檔,我稱之爲代碼:

page = pdf1.AddPage() 
graphics = XGraphics.FromPdfPage(pdfPage) 

當然,還有其他的東西我做的一樣好,如添加XTextFormatters,定義我的起始X,Y座標等等。但足以說,作爲我這個懶惰的人,我嘗試編寫一種方法,允許我傳入所需的所有變量,並自動爲我更新所有這些變量。因此,在短期,是這樣的:

Private Sub ConductPrinting() 
    Dim pdf1 as New Pdf 
    Dim page as PdfPage = pdf1.AddPage() 
    Dim graphics as XGraphics = XGraphics.FromPdfPage(pdfPage) 

    'Printing code here 
    'Printing code here 
    'Printing code here 

    'Start new page code 
    pdfPage = pdf1.AddPage() 
    graphics = XGraphics.FromPdfPage(pdfPage) 
End Sub 

我想寫一個StartNewPage()方法,是這樣的:

Private Sub StartNewPage(pdf1 As Pdf, page As PdfPage, graphics As XGraphics) As Integer 
    pdfPage = pdf1.AddPage() 
    graphics = XGraphics.FromPdfPage(pdfPage) 
End Sub 

使代碼塊可以是這樣的,而不是:

Private Sub ConductPrinting() 
    Dim pdf1 as New Pdf 
    Dim page as PdfPage = pdf1.AddPage() 
    Dim graphics as XGraphics = XGraphics.FromPdfPage(pdfPage) 

    'Printing code here 
    'Printing code here 
    'Printing code here 

    'Start new page code 
    StartNewPage(pdf1, page, graphics) 
End Sub 

你會如何去做這件事?因爲這不起作用;頁面和圖形都仍然引用舊的頁面和圖形。

+2

我認爲你的'page'和'pdfPage'變量/類型有點混淆。如果它們以我懷疑它們的方式混在一起,那麼你需要'Private Sub StartNewPage(pdf1 As Pdf,ByRef page As PdfPage,ByRef graphics As XGraphics)' - 參見[按值和引用傳遞參數(Visual Basic) ](https://msdn.microsoft.com/en-us/library/ddck1z30.aspx?f=255&MSPPError=-2147217396)。您是否使用[Option Strict On](https://msdn.microsoft.com/en-us/library/zcd4xwzs.aspx)? –

+0

ByRef關鍵字完美工作。我忘了一切。添加它作爲答案,我將它標記爲正確:) – Wakka02

回答

0

您需要將您希望通過引用而不是按值來改變的對象,所以......

Private Sub StartNewPage(pdf1 As Pdf, ByRef page As PdfPage, ByRef graphics As XGraphics) 

Passing Arguments by Value and by Reference (Visual Basic)

當通過引用傳遞參數
如果程序真的需要更改調用代碼中的底層元素,請聲明相應的參數ByRef。