所以我在使用C#表单时遇到了一些麻烦。我创建了一个客户列表,其中存储了名称,郊区和银行帐户余额。使用下一个和上一个按钮我需要能够允许用户浏览列表中的当前5个对象。我计划这样做是因为当用户点击按钮时,文本框将填充相关信息。客户和其他细节是按钮的原因是,后来我需要能够更新存储在这些字段中的信息,所以我认为一个好方法是删除文本框中已有的内容,键入新的信息,然后按按钮进行更新。
无论如何,我的主要问题是我需要使用我的视图按钮来浏览我的列表
这就是我的表单的样子:
我目前的表格代码是:
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
Customer c1 = new Customer("Sibel Yilmaz", "Wollongong", 2500, 3000, 5000);
Customer c2 = new Customer("John Doe", "Figtree", 2547, 2500, 3655);
Customer c3 = new Customer("Mariah Moore", "Coniston", 2500, 7000, 36000);
Customer c4 = new Customer("Jessica Blackshaw", "Bellambi", 3500, 6000, 4750);
Customer c5 = new Customer("Suzan Yilmaz", "Wollongong", 2500, 2000, 47110);
List<Customer> customers = new List<Customer>();
customers.Add(c1);
customers.Add(c2);
customers.Add(c3);
customers.Add(c4);
customers.Add(c5);
}
private void Form1_Load(object sender, EventArgs e) { }
private void button2_Click(object sender, EventArgs e) { }
private void button6_Click(object sender, EventArgs e) { }
private void textBox4_TextChanged(object sender, EventArgs e) { }
private void Customer_Click(object sender, EventArgs e) { }
}
我的Customer
课程是:
public class Customer
{
protected string name;
protected string suburb;
protected int postcode;
protected double credit_balance;
protected double saving_balance;
public Customer(string name, string suburb, int postcode, double credit_balance,
double saving_balance)
{
this.name = name;
this.suburb = suburb;
this.postcode = postcode;
this.credit_balance = credit_balance;
this.saving_balance = saving_balance;
}
public string Name
{
get { return name; }
set { name = value; }
}
public string Suburb
{
get { return suburb; }
set { suburb = value; }
}
public int Postcode
{
get { return postcode; }
set { postcode = value; }
}
public double Credit_Balance
{
get { return credit_balance; }
set { credit_balance = value; }
}
public double Savinig_Balance
{
get { return saving_balance; }
set { saving_balance = value; }
}
}
请帮帮我,让我知道最好的方法是什么。
答案 0 :(得分:3)
您需要做的第一件事是让您的客户列表具有类级别可见性,以便您可以在按钮单击事件中访问它。
public partial class Form1 : Form
{
int index = 0;
List<Customer> customers = new List<Customer>();
public Form1()
{
... The remainder of your Constructor code
一旦你这样做,你应该可以做这样的事情。
private void next_Click(object sender, EventArgs e)
{
if (index < customers.Count - 1)
{
index += 1;
textBox1.Text = customers[index].Name;
...
}
}
private void previous_Click(object sender, EventArgs e)
{
if (index > 0)
{
index -= 1;
textBox1.Text = customers[index].Name;
...
}
}
答案 1 :(得分:3)
使用DataBinding,如果你需要更改某些字段的内容,你可以使用按钮来更新或简单地设置DataSourceUpdateMode,就像我在这里对OnPropertyChange一样,每当你更改其中一个文本框中的文本时它会更新数据源(在本例中为List)。您可以单独定义Binding对象,然后将其添加到textbox.DataBindings,以便您可以格式化和解析它,但在这里我只是为了演示目的而直接添加它们:
List<Customer> customers;
public Form1()
{
InitializeComponent();
//you could add the Customers directly to the add method of the list.
Customer c1 = new Customer("Sibel Yilmaz", "Wollongong", 2500, 3000, 5000);
Customer c2 = new Customer("John Doe", "Figtree", 2547, 2500, 3655);
Customer c3 = new Customer("Mariah Moore", "Coniston", 2500, 7000, 36000);
Customer c4 = new Customer("Jessica Blackshaw", "Bellambi", 3500, 6000, 4750);
Customer c5 = new Customer("Suzan Yilmaz", "Wollongong", 2500, 2000, 47110);
customers = new List<Customer>();
customers.Add(c1);
customers.Add(c2);
customers.Add(c3);
customers.Add(c4);
customers.Add(c5);
textBox1.DataBindings.Add("Text", customers, "Name",true,DataSourceUpdateMode.OnPropertyChanged);
textBox2.DataBindings.Add("Text", customers, "Suburb", true, DataSourceUpdateMode.OnPropertyChanged);
textBox3.DataBindings.Add("Text", customers, "Postcode", true, DataSourceUpdateMode.OnPropertyChanged);
textBox4.DataBindings.Add("Text", customers, "Credit_Balance", true, DataSourceUpdateMode.OnPropertyChanged);
textBox5.DataBindings.Add("Text", customers, "Savinig_Balance", true, DataSourceUpdateMode.OnPropertyChanged);
}
然后在上一个和下一个按钮中:
private void PreviousBtn_Click(object sender, EventArgs e)
{
--this.BindingContext[this.customers].Position;
}
private void NextBtn_Click(object sender, EventArgs e)
{
++this.BindingContext[this.customers].Position;
}