2016-11-17 6 views
0

私はC#の初心者です。 enter image description hereControl.Location.Y返信しない正しい位置

リストボックスの代わりに単純なパネルを使用しました。これは、すべてのエントリにコントロールを追加する必要があったためです。さて、画像に表示されているリストは、テストするために作ったものなので、そのハードコーディングされた値だけです。しかし、今では、各エントリを最後のエントリの下に動的に移動しようとしているとき、私はそれが起こることができません。私はControl.Location.Yを使用しましたが、毎回2番目のエントリのY座標を返し、エントリが重なり合っています。 enterItemsを呼び出している

public void enterItems (listingPanel list, int loc) 
    { 
     items.Add(list); 
     int lastIndex = items.Count - 1; 
     int newLoc = items[lastIndex].Location.Y + 52; 
     this.Controls.Add(items[lastIndex]); 
     if (lastIndex >= 1) 
      items[lastIndex].Location = new Point(0, newLoc); 
     Console.WriteLine("index: " + lastIndex + ", location Y: " + (items[lastIndex].Location.Y + 52) + " last loc: " + items[lastIndex].Location.Y + "Total: " + items.Count); 
    } 

これは、addItems(int型)の定義である()メソッド::ここで

コードです

private void addItems(int loc) 
    { 
     listingPanel lists = new listingPanel("Shashlik", Convert.ToString(20), Convert.ToString(2)); 
     listing.enterItems(lists, loc); 
    } 

これはaddItemsを呼び出しているイベントです(int)メソッド:事前に

private void sellBtn_Click(object sender, EventArgs e) 
    { 
     //for (int i = 0; i<1000; i = i+52) 
      addItems(0); 
    } 

感謝:)

答えて

1

最初にアイテムをリストに追加してから、前のアイテムに相対的に配置します。

は、しかし、あなたがリストに新しい項目を追加した後、最後の項目のインデックスを取得するので、あなたが実際に自体にアイテムを位置決めしています!

注意してください:あなたがアイテムを追加する前にint lastIndex = items.Count - 1を置くことによって問題を解決しようとする場合は、いくつかの最初の項目のためのY位置を提供する必要がありますので、それは当然のことながら、lastIndex == -1ので、例外がスローされます他の方法。

+0

問題を指摘していただきありがとうございます。私が次に行ったことは、if条件のlastIndexから1を引くことでした。 (lastIndex> = 1)の場合は です。 – user2978059

関連する問題