0

pcno3 つのテキストボックス ( 、pcnameおよびpcipadd)、データソースを使用する 1 つのリストボックス、および新しい項目を追加するための 1 つのボタンを含む winform アプリケーションを作成します。リストボックスにアイテムを追加するのに問題があります。アイテムの追加ボタンで次のコードを使用しています。

_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 に答える