0

私はコーディングの初心者で、簡単な問題を解決しようとしています:

3 つの列を持つリストがあり、リストに格納されている値にアクセスしようとしています。そして、それは私に答えを与えません... 何か考えはありますか? ありがとう

private void btnImage1Load_Click(object sender, EventArgs e)
    {
        openFileDialog1.ShowDialog();
        pictureBox1.ImageLocation = openFileDialog1.FileName;                    
    }

    public class ListThreeColumns
    {
        public int XCoord { get; set; }
        public int YCoord { get; set; }
        public Color Color { get; set; }
    }

    private List<ListThreeColumns> GetPixels()
    {
        Bitmap picture = new Bitmap(pictureBox1.Image);

        List<ListThreeColumns> colorList = new List<ListThreeColumns>
        {

        };

        for (int y = 0; y < picture.Height; y++)
        {
            for (int x = 0; x < picture.Width; x++)
            {
                colorList.Add(new ListThreeColumns { XCoord = x, YCoord = y, Color = picture.GetPixel(x, y) });
            }
        }
        return colorList;
    }


    private void btnScanPixels_Click(object sender, EventArgs e)
    {
        List<ListThreeColumns> seznamBarev = GetPixels();
       MessageBox.Show(seznamBarev[6].ToString());


    }
4

2 に答える 2

4

この行で:

MessageBox.Show(seznamBarev[6].ToString());

...リストの要素6にアクセスしていますが、それを呼び出しToStringているだけです。オーバーライドしていないためListThreeElements(ちなみに、名前を付けたほうがよいでしょうPixel)、結果は特に役に立たないことを意味します。

あなたは書くことができます:

ListThreeColumns pixel = seznamBarev[6];
MessageBox.Show(string.Format("{0}, {1} - {2}", pixel.X, pixel.Y, pixel.Color);
于 2012-11-19T23:05:11.003 に答える
0

何をしたいですか?各項目を文字列で表示したい場合は、Jon way を使用できます。ただし、操作をクラスに移動することをお勧めします。ListThreeColumns クラスの 'ToString()' メソッドをオーバーライドすると、コードは変更しなくても正しく動作します。

 public class ListThreeColumns
{
    public int XCoord { get; set; }
    public int YCoord { get; set; }
    public Color Color { get; set; }

    public override ToString()
    {
         return string.Format("X={0}, Y={1}, Color=({2};{3};{4})", 
             this.XCoord , this.YCoord , Color.R,Color.G,Color.B );
    }
}
于 2012-11-20T00:16:15.743 に答える