Il componente PageSetupDialog ha un baco (noto) per cui se (nel computer) le impostazioni di misura sono quelle metriche i valori dei margini impostati vengono convertiti in pollici, e quindi diminuiti.
In pratica, se si esegue la ShowDialog del componente l'utente può imposta il valore 10 per il margine sinistro, preme ok e voi dalla vostra applicazione leggete che ha impostato 3,9!
Il problema è descritto nell'articolo: http://support.microsoft.com/?id=814355
Per ovviare a questo inconveniente possiamo modificare la chiamata alla ShowDialog del componente nel modo seguente:
1 Imports System.Drawing.Printing
2
3 Public Class Form1
4
5 Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) _
6 Handles Button1.Click
7 ' Inizializza la proprietà PageSettings
8 Me.PageSetupDialog1.PageSettings = New PageSettings
9 ' Apre la finestra delle impostazioni della pagina
10 Me.PageSetupDialog1.ShowDialog(Me)
11 '============================================================
12 ' Commentare il seguente IF per vedere la differenza
13 '============================================================
14 ' Esegue la coversione se il sistema corrente è metrico
15 If System.Globalization.RegionInfo.CurrentRegion.IsMetric Then
16 Me.PageSetupDialog1.PageSettings.Margins = _
17 PrinterUnitConvert.Convert(Me.PageSetupDialog1.PageSettings.Margins, _
18 PrinterUnit.ThousandthsOfAnInch, PrinterUnit.HundredthsOfAMillimeter)
19 End If
20 ' Riapre la finestra delle impostazioni
21 Me.PageSetupDialog1.ShowDialog(Me)
22 End Sub
23
24 End Class