返回首页

首先,衷心感谢名单的概念介绍给韦恩Gaylard。我只是对这个小"车库"使用WPF的应用程序,努力实现列表,但我感到震惊,不知道如何进一步进行。这是我有这么远。我1非常初学者编程,所以请原谅我缺乏良好的设计。

在car.cs

class car

    {

 

        public double cylinders

        {

            get;

            set;

        }

 

        public double topspeed

        {

            get;

            set;

        }

 

        public double horsepower

        {

            get;

            set;

        }

    }

在Window1.cs

{C}
在Window2.cs

private void button1_Click(object sender, RoutedEventArgs e)

      {

          foreach (car item in carlist) // I cannot use this list because it is in another window. 

// I would either like to create a newcarlist in window2 and copy all the contents of the carlist in window1 or need a way to access the carlist in window1. 

          {

              MessageBox.Show(string.Format("Topspeed: {0}, Horsepower: {1} and so on", item.cylinders, item.topspeed, item.horsepower, ));  // display topspeed, horsepower, cylinders of each car.

           }

 

      }

  }

修复此代码的任何帮助将不胜感激。谢谢| steersteer:米卡Wendelius:如果我正确地理解你的问题:

所有的清单首先应定义在模块级(至少)。如果你定义一个Click事件处理程序的列表,你不能访问它的另一种方法。所以在模块级别的东西,如:
{体C3}
在这里你可以设置属性时,创建一个实例:
{的C4}或者您可以设置它们分开:
{C5的}
您还可以设置从用户的控制,类似的属性:
{5233}当你通过汽车循环,你可以使用foreach。是这样的:
{C7-}

回答

评论会员:游客 时间:2012/02/05
OK,添加车到您的列表{C8的}然后查看每节车厢IKEcodeprelang="cs"spanclass="code-keyword"foreach/span(Carcarspanclass="code-keyword"in/spanb){MessageBox.Show(spanclass="code-string""/spanspanclass="code-string"Cylinders="/span+car.cylinders+spanclass="code-string""/spanspanclass="code-string"\n"/span+spanclass="code-string""/spanspanclass="code-string"Horsepower="/span+car.horsepower+spanclass="code-string""/spanspanclass="code-string"\n"/span+spanclass="code-string""/spanspanclass="code-string"Topspeed="/span+car.topspeed)}/pre/code只是一个字命名约定所有的类名应该开始与资本,以及所有的属性,在这样类{C10的}希望这有助于:西蒙邦Terkildsen
首先,我不觉得这是一个好主意,同时学习如何编程使用WPF,所以我建议你忘了WPF,并开始做一些基本的控制台应用程序。努力学习WPF,而不是一个好主意,我知道谁曾学习WPF,或者认为他们学到了优秀的程序员,但真的没有任何想法如何利用WPF。我并不想成为一个巨魔,我只是怕你会呛自己,试图在同一时间学习到很多。

不过我会去通过一些你的代码有问题。
1)
{C11的} 你想在这里做的是使用]
所以,你可以这样初始化型汽车的性能:
{C12的}
2)在中button1_Click你创建一个新的列表,您与我们刚才讨论的代码中添加一个新的汽车。但你不能存储此列表中的任何地方,你可能想的是你的类中有一个字段可以存储你的车实例。

3)同样是在中button1_Click你有这样的语句,如果(我== N)
& #160;该声明将永远是真实的,当你启动你确保我LT在声明中n如果(I LT N)

4)我可以去这里有点,但我什至不能确保你理解我刚写的什么,我真的不想写2-3页,在这里如果你不能使用任何我,你的问题很简单大。从底部我的心,我强烈建议你不要使用WPF中,直到你有一个良好的C#crasp。

但是,如果你有你的代码的具体问题随时问,我将尝试为你解释。
好吧,如果我理解正确的话,你的问题是现在你有你想用在window2 Window1的实例。

你可以在几个方式解决:
1)可以使卡洛斯领域的公共和静态的,例如=新名单();当你做,你可以访问它喜欢这样window1.carlist的这里Window1的公共静态名单卡洛斯是不是一个实例,但类型/类名
。这不是一个很好的解决方案,领域不应该是公开的,如果有两个实例Window1的,那么他们将分享卡洛斯
2)你可以给window2 Window1的,例如你使用,使卡洛斯领域的公共或返回卡洛斯的属性。
3)您可以给卡洛斯以window2通过它的构造。这是我会建议你做什么。
例如:

public partial class window1 : Window

{

...

    private void button2_Click(object sender, RoutedEventArgs e)

    {

        window2 win2 = new window2(carlist);

        win2.Show();

    }

...

}


public partial class window2 : Window

{

    private IList<car> carlist;

...

    public window2(IList<car> carlist)

    {

        this.carlist = carlist; // this is the reference to the current instance so

                                // this.carlist refers to the field carlist not the parameter.

        InitializeComponent();

    }

...

}

评论会员:BillWoodruff 时间:2012/02/05
我想你""在这里伟大的忠告{S0的}完全lubed,但让我补充几点意见,油底壳溢出的风险:

0。似乎什么'失踪'在列表的结构是一些每节车厢的编号:如果你有四个车,都具有相同的相同规格

1。替换的文本框,用于输入值的汽车数量,缸,马力等的NumericUpDown控制。 (我认为WPF提供,或等效的吗?)

考虑封装与"汽车"类中的对象(和/或命名空间,如下所示)您的所有业务,也许就像这个:
using System.Collections.Generic;

 

namespace Cars

{

    public class Car

    {

        public double Cylinders{get; set;}

 

        public double Topspeed{get; set;}

 

        public double Horsepower{get; set;}

    }

 

    // we're using inheritance here to make a List<Car>

    public class CarList: List<Car>

    {

        private static int defaultCylinders = 8;

        private static double defaultTopSpeed = 100.0;

        private static double defaultHorsePower = 90.0;

 

        // we are overloading the Add operator here

        // to allow us to check for the need to set

        // default values, if they are missing ...

        internal void Add(Car newCar)

        {

            if (newCar.Cylinders == 0.0) newCar.Cylinders = defaultCylinders;

            if (newCar.Horsepower == 0.0) newCar.Horsepower = defaultHorsePower;

            if (newCar.Topspeed == 0.0) newCar.Topspeed = defaultTopSpeed;

 

            // here we call the underlying List<Car> 'Add method

            base.Add(newCar);

        }

    }

}
如果有这打算1-和-只有-1汽车列表,你可以做的"卡洛斯类的静态

所以,你将如何使用这种风格的类定义实际上使名单:假设这段代码是在一些窗口或单独的上下文(命名空间)"汽车"类的定义:{C16的}上面的例子中使用的技术(VAR),语法和对象初始化语法,从C#2.0和更高版本。测试和验证的WinForms只