That is because you are looping through the entire array - all of the images are being assigned to the picture box but so quickly you won't see them. Then when the loop is finished only the last picture is there.
You need to load the array of images outside of this button click and initialise the counter to 0 - counter will need to be declared at the form level.
In the button click display the image and increment the counter
Here's an example of what I mean. The advantage of doing this one picture at a time on a user-initiated event is that the User can get out of this when they want to
public partial class Form3 : Form
{
string[] images = Directory.GetFiles(@"C:\outputDirectory", "*.bmp");
private int counter = 0;
private void Form3_Load(object sender, EventArgs e)
{
}
private void button1_Click(object sender, EventArgs e)
{
if (images.Length == 0) return;
var image = Image.FromFile(images[counter]);
pictureBox.Width = image.Width;
pictureBox.Height = image.Height;
pictureBox.Image = image;
if (++counter >= images.Length) counter = 0;
}
}