1

私が初心者だと言うとき、私はあなたが前もってとても謝罪することができるのと同じくらい新鮮です!

私がやろうとしているのは、2つの画像ボックスと1つのボタンがあるフォームです。ボタンをクリックすると、画像フォルダから2つの新しい画像が選択され、合計5回実行されます。

私がこれにどのようにアプローチするかについてのアイデア-ボタンクリックについてこれまでに持っているものは次のとおりです

 private void button1_Click(object sender, EventArgs e)
    {
      pictureBox1.Load(@"C:\Resources\PICT01.JPG");
      pictureBox2.Load(@"C:\Resources\PICT02.JPG");
}

私はただ学んでいるので、どんな答えも本当に基本的である必要があります!前もって感謝します

4

3 に答える 3

1

画像を切り替えた頻度を追跡するためにグローバルintを作成し、button1_clickでその数を処理する必要があります。

私自身は専門家ではありませんが、これが私がそれを行う方法です。5つの異なる可能性をチェックする必要があるため、ここではスイッチが理想的です。

//global int
int count = 0;

private void button1_Click(object sender, EventArgs e)
{
  count++;
  switch(count)
  {
     case 1:
       //load image 1 and 2
       break;
     case 2:
       //load image 3 and 4
       break;
     case 3:
       //load image 5 and 6
       break;
     case 4:
       //load image 7 and 8
       break;
     case 5:
       //load image 9 and 10
       break;
     default: 
       break;
  }
}
于 2012-11-21T21:36:30.477 に答える
0

このサンプルプログラムは、MyPicturesフォルダ内のすべてのjpgファイルのリストを作成し、リストからランダムな画像を選択します。リストが空の場合、例外が発生します。

public Form1()
{
    // Reading pictures from My Pictures:
    string path = Environment.GetFolderPath(Environment.SpecialFolders.MyPictures);
    DictionaryInfo myPictures = new DictionaryInfo(path);
    FPictureFiles = myPictures.GetFiles("*.jpg", SearchOption.AllDirectories).ToList();
}
private List<FileInfo> FPictureFiles;
private Random FRandom = new Random();

private void button1_Click(object sender)
{
    pictureBox1.Load(PickFile());
    pictureBox2.Load(PickFile());
}

private string PickFile()
{
    if (FPictureFiles.Count == 0) throw new Exception("No more picture files");

    int index = FRandom.Next(FPictureFiles.Count);
    string filename = FPictureFiles[index].FullName;
    FPictureFiles.RemoveAt(index);
    return filename;
}

これがあなたの探求に役立つことを願っています。

于 2012-11-21T21:57:03.363 に答える
0

List<string>選択した特定の拡張子を持つすべてのファイルを一覧表示する新しいファイルを作成してみてください。Random次に、範囲が私たちの値を超えないことを考慮して、特定の範囲内の乱数を取得する新しいクラスを初期化しList<string>.Countます。

CurrentClicksそれが新しい整数を識別し、MaximumClicks私たちの最大値であると仮定します

public Form1()
{
    InitializeComponent();
    button1.Click += new EventHandler(button1_Click); //Link the Click event of button1 to button1_Click
}

const int MaximumClicks = 5; //Initialize a new constant int of value 5 named MaximumClicks
int CurrentClicks = 0; //Initialize a new variable of name CurrentClicks as an int of value 0

以下が適用される場合があります

private void button1_Click(object sender, EventArgs e)
{
    if (CurrentClicks < MaximumClicks) //Continue if CurrentClicks is less than 5
    {
        string FilesPath = @"D:\Resources\International"; //Replace this with the targeted folder
        string FileExtensions = "*.png"; //Applies only to .png file extensions. Replace this with your desired file extension (jpg/bmp/gif/etc)
        List<string> ItemsInFolder = new List<string>(); //Initialize a new Generic Collection of name ItemsInFolder as a new List<string>
        foreach (string ImageLocation in Directory.GetFiles(FilesPath, FileExtensions)) //Get all files in FilesPath creating a new string of name ImageLocation considering that FilesPath returns a directory matching FileExtensions considering that FileExtensions returns a valid file extension within the targeted folder
        {
            ItemsInFolder.Add(ImageLocation); //Add ImageLocation to ItemsInFolder
        }
        Random Rnd = new Random(); //Initialize a new Random class of name Rnd
        int ImageIndex = Rnd.Next(0, ItemsInFolder.Count); //Initialize a new variable of name ImageIndex as a random number from 0 to the items retrieved count
        pictureBox1.Load(ItemsInFolder[ImageIndex]); //Load the random image based on ImageIndex as ImageIndex belongs to a random index in ItemsInFolder
        CurrentClicks++; //Increment CurrentClicks by 1
    }
    else
    {
        //Do Something (MaximumClicks reached)
    }
}

これにより、指定された拡張子に一致する、指定されたフォルダー内のファイルの場所が取得されます。PictureBox次に、名前のに集められたファイルの場所からランダムなファイルをロードしますpictureBox1

ただし、これにより、以前にに追加されたファイルは回避されませんPictureBox。重複を避けたい場合は、新しいintアレイを作成するか、適用されたList<int>すべてのアレイを追加することができますが、管理が簡単なように思われるため、一緒に使用することをお勧めしますImageIndexPictureBoxList<int>

List<int> AlreadyAdded = new List<int>();
redo:
    Random Rnd = new Random();
    int ImageIndex = Rnd.Next(0, ItemsInFolder.Count);
    if (AlreadyAdded.Contains(ImageIndex)) //Continue within this block if the item already exists in AlreadyAdded
    {
        goto redo;
    }                
    AlreadyAdded.Add(ImageIndex); //Add ImageIndex to AlreadyAdded

ありがとう、
これがお役に立てば幸いです:)

于 2012-11-21T21:58:02.447 に答える