0

我创建了一个包含 3 个文本框( 和 )、一个使用数据源的列表框和一个添加新项目的按钮的 winformpcno应用pcname程序pcipadd。我无法将项目添加到我的列表框中。我在添加项目按钮上使用此代码:

_pcno.Add(new PCNo() { PCNO = pcno.Text, 
                       PCNAME = pcname.Text, 
                       IPADDRESS = pcipadd.Text });

上面的代码成功添加了新项目,但列表框中的选定项目也被更新了。

详细地说,我的列表框中目前有一个“PCN01”。然后我转到我的文本框(pcno.text)然后写入新值(例如“PC02”)并单击按钮添加项目。发生的情况是项目已添加但“PC01”也更新为“PC02”。重新加载表单(重新打开)后,所有更改恢复正常,“PC01”及其值和“PC02”及其值。我只是不希望列表框中的选定项目在添加新项目时得到更新。有任何想法吗?

好的,简单地说,这就是我想要做的,你可以试试,如果你添加新项目,选定的项目也会更新:

using System;
using System.ComponentModel;
using System.Windows.Forms;

namespace PCListing
{
public partial class Form1 : Form
{
    private BindingList<mylist> _pcno;

    private ListBox listBox1;
    private TextBox pcno;
    private TextBox pcname;
    private Button btnAdd;

    public Form1()
    {
        InitializeComponent();

        FlowLayoutPanel layout = new FlowLayoutPanel();
        layout.Dock = DockStyle.Fill;
        Controls.Add(layout);

        listBox1 = new ListBox();
        layout.Controls.Add(listBox1);

        pcno = new TextBox();
        layout.Controls.Add(pcno);

        pcname = new TextBox();
        layout.Controls.Add(pcname);

        btnAdd = new Button();
        btnAdd.Click += btnAdd_Click;
        btnAdd.Text = "Add Item";
        layout.Controls.Add(btnAdd);

        Load += new EventHandler(Form1_Load);
    }

    private void Form1_Load(object sender, EventArgs e)
    {
        _pcno = new BindingList<mylist>();
        _pcno.Add(new mylist() { pcno = "1", pcname = "PC01" });
        _pcno.Add(new mylist() { pcno = "2", pcname = "PC02" });

        listBox1.DisplayMember = "pcno";
        listBox1.DataSource = _pcno;
        pcno.DataBindings.Add("Text", _pcno, "pcno");
        pcname.DataBindings.Add("Text", _pcno, "pcname");
    }

    private void btnAdd_Click(object sender, EventArgs e)
    {
            _pcno.Add(new mylist() { pcno =pcno.Text, pcname = pcname.Text });
    }
    public class mylist
    {
        public string pcname { get; set; }
        public string pcno { get; set; }
    }
}
}
4

1 回答 1

2

该问题是由 TextBox 数据绑定引起的。

pcno.DataBindings.Add("Text", _pcno, "pcno");
pcname.DataBindings.Add("Text", _pcno, "pcname");

在该表单中,当您在文本框中编辑值时会更新 DataSource。

您可以考虑将这些行更改为:

pcno.DataBindings.Add("Text", _pcno, "pcno", false, DataSourceUpdateMode.Never);
pcname.DataBindings.Add("Text", _pcno, "pcname", false, DataSourceUpdateMode.Never);
于 2013-02-19T14:31:05.337 回答