如何将AND添加到foreach循环?

时间:2017-05-09 13:10:41

标签: c# foreach listbox drawing

我有两个列表框(listboxlong和listboxlat),我有一个图片框,用于在列表框中绘制值(通过使用计时器(timer1))。我想参加每一行的列表框值到图片框x和y值(listboxlong表示x值,listboxlat表示y值)。即使我尝试了foreach循环我也无法实现它。如果有一个代码与AND一起工作,请告诉我。谢谢你的帮助。这是我的代码;

 private void timer1_Tick(object sender, EventArgs e)
    {
        pictureBoxPath.Refresh();
       listBoxLong.Items.Add(gPathBoylam);
       listBoxLat.Items.Add(gPathEnlem);
     }
  private void pictureBoxPath_Paint(object sender, PaintEventArgs e)
    {
        SolidBrush myBrush = new SolidBrush(Color.Red);

       foreach (var item in listBoxLat.Items)
        {
              foreach (var item2 in listBoxLong.Items)
            {
          e.Graphics.DrawEllipse(myPen, Convert.ToInt16(item), Convert.ToInt16(item2), 2, 2);
            }

        }           

    }

1 个答案:

答案 0 :(得分:1)

你需要意识到你的问题不是很清楚,而是要阅读你的评论并特别注意这一点:

foreach(var item in listBoxLat.Items && var item2 in listBoxLong.Items)
{
    e.Graphics.DrawEllipse(myPen, Convert.ToInt16(item), Convert.ToInt16(item2), 2, 2);
}

我认为您正在尝试将一个列表中的第一项运行到第一个项目到另一个列表并继续。你正在同步它们。

因此,更好的方法是使用元组存储在元组列表中。你需要意识到“Graphics.DrawEllipse”的工作原理。所以我把文档摘要放在下面。

所以下面的代码可能有效,我无法测试,因为我现在正在工作。

List<Tuple<int, int>> myTuple = new List<Tuple<int, int>>();

private void timer1_Tick(object sender, EventArgs e)
{
    pictureBoxPath.Refresh();

    myTuple.Add(new Tuple<int, int>(gPathBoylam, gPathEnlem));  
}

//
// Summary:
//     Draws an ellipse defined by a bounding rectangle specified by coordinates
//     for the upper-left corner of the rectangle, a height, and a width.
//
// Parameters:
//   pen:
//     System.Drawing.Pen that determines the color, width,
//      and style of the ellipse.
//
//   x:
//     The x-coordinate of the upper-left corner of the bounding rectangle that
//     defines the ellipse.
//
//   y:
//     The y-coordinate of the upper-left corner of the bounding rectangle that
//     defines the ellipse.
//
//   width:
//     Width of the bounding rectangle that defines the ellipse.
//
//   height:
//     Height of the bounding rectangle that defines the ellipse.
//
// Exceptions:
//   System.ArgumentNullException:
//     pen is null.
private void pictureBoxPath_Paint(object sender, PaintEventArgs e)
{   
    Pen myPen = new Pen(Color.Red, 3); // Create pen

    if(myTuple != null && myTuple.Any())
    {
        foreach (var tuple in myTuple)
        {   
            Rectangle rect = new Rectangle(Convert.ToInt16(tuple.Item1), Convert.ToInt16(tuple.Item2), 2, 2); // Create rectangle for ellipse

            e.Graphics.DrawEllipse(myPen, rect); // Draw ellipse to screen
        }
    }
}