17433


`pictureBox1`をクリックすると[1]を[2]にしたいです。  
変数無しでやるにはどうすればよいでしょうか？  
グローバル変数などは使いたくありません。  
配列.nextみたいなのを探しています。  
なるべく１行でやりたいです。

[code]

    private void pictureBox1_Click(object sender, EventArgs e)
    {
        pictureBox1.ImageLocation = Directory.GetFiles(label1.Text, "*.*")[1];
    }
    
[/code]


CC BY-SA 3.0
2015-10-08T09:38:07.077
17424
2015-10-09T02:43:55.480
2015-10-08T13:49:07.743
2238
7973
question
c# winforms
変数を使わずに数値を１上げたい


ローカル変数でIEnumeratorを１個だけ持ってもよければ可能ですが

[code]

    using System;
    using System.Linq;
    using System.Windows.Forms;
    namespace WindowsFormsApplication1
    {
        public partial class Form1 : Form
        {
            public Form1()
            {
                InitializeComponent();
    
                System.Collections.Generic.IEnumerator<string> ie = null;
                label1.Click += (s, e) => { var d = new FolderBrowserDialog(); if (d.ShowDialog() == DialogResult.OK) label1.Text = d.SelectedPath; };
                label1.TextChanged += (s, e) => { ie = System.IO.Directory.GetFiles(label1.Text, "*.*").Cast<string>().GetEnumerator(); };
                pictureBox1.Click += (s, e) => { pictureBox1.ImageLocation = ie == null ? null : ie.MoveNext() ? ie.Current : null; };
            }
        }
    }
    
[/code]


CC BY-SA 3.0
2015-10-08T14:34:19.030
17433
2015-10-08T14:34:19.030
4926
17424
answer


もし、RX(nugetでRx-Mainを追加してください)が使える環境ならばローカル変数なくても可能かと思います。  
お決まりのusing句は省略します。適宜追加してください

[code]

    using System.Reactive.Linq; //これを追加
    class Form1:Form
    {
        Form1()
        {
            Observable
                .FromEvent<EventHandler, EventArgs>(h => (sender, e) => h(e), h => pictureBox1.Click += h, h => pictureBox1.Click -= h)
                .Select((e, index) => new { e, index })
                .Subscribe(v => pictureBox1.ImageLocation = Directory.GetFiles(label1.Text, "*.*")[v.index]);
    
        }
    }
    
[/code]

数値のリセットとか考慮する点はまだありますが、質問の内容は満たせると思います。  
※indexは0から始まるので適宜使用すればよいです。


CC BY-SA 3.0
2015-10-09T02:43:55.480
17455
2015-10-09T02:43:55.480
12681
17424
answer