VB.Net Версия:
Поскольку вы хотите создать предварительный просмотр печати, я хотел бы предложить вам создать новый Form
только для предварительного просмотра печати и отслеживать PageNumber
, которые пользователь вводит
Dim pageNumber As Integer = 0 'start from 0, but change this according to the user input accordingly
Вы можете получить список файлов из заданной папки с помощью Directory.GetFiles
в System.IO
Dim rawpaths As List(Of String) = Directory.GetFiles(folder).ToList() 'This gets all files, not only images
Вам может понадобиться для предоставления списка допустимого расширения изображения согласно this.
Dim validImageFormat As New List(Of String) From {"jpg", "bmp", "png", "jpeg", "gif", "tiff"}
и фильтровать результаты поиска файлов таким образом, что они содержат только приемлемые результаты изображения, как это (используя Split
метод, Contains
и т.д ...)
Dim paths As List(Of String) = New List(Of String)
For Each rawpath As String In rawpaths
Dim rawwords As String() = rawpath.Split(".") 'split the rawpath, the important is the last element, which is the file extension
If (validImageFormat.Contains(rawwords(rawwords.Length - 1))) Then 'the rawpath is a valid image path
paths.Add(rawpath) 'this is a valid image path
End If
Next
Затем в вашем предварительном просмотре печати Form
вам может потребоваться перечислить ваши 8 ListBox
es, чтобы облегчить вам управление дисплеем позже, а также для обработки случая, когда количество изображений не умножается на 8
Dim pbList As List(Of PictureBox) = New List(Of PictureBox)
Private Sub printPreviewForm_Load(sender As Object, e As EventArgs) Handles MyBase.Load
pbList.Add(PictureBox1) 'list your picture box will help you later
pbList.Add(PictureBox2)
pbList.Add(PictureBox3)
pbList.Add(PictureBox4)
pbList.Add(PictureBox5)
pbList.Add(PictureBox6)
pbList.Add(PictureBox7)
pbList.Add(PictureBox8)
End Sub
Затем вам нужно определить, сколько снимков будут показаны (мин 1, макс 8, на основе PageNumber
)
If (pageNumber * 8 > paths.Count) Then 'exceeds the possible image display
Return 'this is not allowed, do something
End If
Dim minPathNo As Integer = pageNumber * 8 'get the min and max for later display
Dim maxPathNo As Integer = Math.Min(pageNumber * 8 + 7, paths.Count - 1)
Наконец, для отображения, вы можете использовать Image.FromFile()
метод, чтобы загрузить файл изображения из папки и с помощью minPathNo
и maxPathNo
объявленной перед тем, чтобы показать изображения безопасно
If (pageNumber * 8 > paths.Count) Then 'exceeds the possible image display
Return 'this is not allowed, do something
End If
Dim minPathNo As Integer = pageNumber * 8
Dim maxPathNo As Integer = Math.Min(pageNumber * 8 + 7, paths.Count - 1)
For i As Integer = minPathNo To minPathNo + 7
Dim pbIndex As Integer = i - minPathNo
If i <= maxPathNo Then
pbList(pbIndex).Image = Image.FromFile(paths(i)) 'display existing image
Else
pbList(pbIndex).Image = Nothing 'don't display non-existing image
End If
Next
Edit:
Предположим, что ваша форма выглядит следующим образом:
Тогда это как ваш код будет выглядеть только в одной форме. В вашем случае, вы должны сделать две формы:
Imports System.IO
Public Class Form1
Dim folder As String = "C:\MyPics"
Dim validImageFormat As New List(Of String) From {"jpg", "bmp", "png", "jpeg", "gif", "tiff"}
Dim pbList As List(Of PictureBox) = New List(Of PictureBox)
Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
Dim rawpaths As List(Of String) = Directory.GetFiles(folder).ToList() 'Assuming all the file is image
Dim paths As List(Of String) = New List(Of String)
For Each rawpath As String In rawpaths
Dim rawwords As String() = rawpath.Split(".") 'split the rawpath, the important is the last element, which is the file extension
If (validImageFormat.Contains(rawwords(rawwords.Length - 1))) Then 'the rawpath is a valid image path
paths.Add(rawpath) 'this is a valid image path
End If
Next
Dim pageNumber As Integer = NumericUpDown1.Value
If (pageNumber * 8 > paths.Count) Then 'exceeds the possible image display
Return 'this is not allowed, do something
End If
Dim minPathNo As Integer = pageNumber * 8
Dim maxPathNo As Integer = Math.Min(pageNumber * 8 + 7, paths.Count - 1)
For i As Integer = minPathNo To maxPathNo
Dim currentPictureBox As Integer = i - minPathNo
pbList(currentPictureBox).Image = Image.FromFile(paths(i))
Next
End Sub
Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
pbList.Add(PictureBox1)
pbList.Add(PictureBox2)
pbList.Add(PictureBox3)
pbList.Add(PictureBox4)
pbList.Add(PictureBox5)
pbList.Add(PictureBox6)
pbList.Add(PictureBox7)
pbList.Add(PictureBox8)
End Sub
End Class
И вам нужно всего лишь изменить numericUpDown
(имитируя вашу page` до 0, 1, 2, и т.д. ...)
У вас есть код 'page'? Вам нужно иметь 8 ящиков для изображений и просто заменять их новыми изображениями, когда пользователь меняет «страницу».Как только у вас будет страница, все будет намного проще. – Ian
извините, у меня нет кода страницы. – Kevin
У вас есть форму? 'form' - ваша' страница' (если у вас нет меньшего элемента управления, например 'Panel' в' form'), просто добавьте 8 'PictureBox' в вашу' Form' и две кнопки 'Prev Page' и' Next Page'. Затем проследите, на какую 'страницу' вы находитесь' int index'. Основываясь на 'index', вы можете загрузить изображения, которые должны быть помещены в 8' PictureBox', правильно в соответствии с тем, что вводится пользователем (они: щелчок «Следующая страница» или «Предыдущая страница») – Ian