1

このカスタム クラスのリストがあります。

public class Item
{
    public string @Url;
    public string Name;
    public double Price;

    public Item(string @url, string name, double price)
    {
        this.Url = url;
        this.Name = name;
        this.Price = price;
    }


    public void setPrice(Button button)
    {
        this.Price = Convert.ToDouble(button.Text);
    }
}

今、私のメインのwinformでこれが宣言されています

List<Item> items = new List<Item>();

フィールドは、次のように追加ボタンを介して設定され、3 つのテキスト ボックスから情報を取得し、新しいアイテムに保存します。

Regex url = new Regex(@"^[a-zA-Z0-9\-\.]+\.(com|org|net|ca|mil|edu|COM|ORG|NET|CA|MIL|EDU)$");
Regex name = new Regex(@"^[0-9, a-z, A-Z, \-]+$");
Regex price = new Regex(@"^[0-9, \.]+$");

if (url.IsMatch(urlText.Text) && name.IsMatch(nameText.Text) && price.IsMatch(priceText.Text))
{
     itemListBox.Items.Add(nameText.Text);
     double item_Price = Convert.ToDouble(priceText.Text);
     items.Add(new Item(@itemURL.Text, itemName.Text, item_Price));
     nameText.Clear();
     priceText.Clear();
     urlText.Clear();
}
else
{
     match(url, urlText, urlLabel);
     match(price, priceText, priceLabel);
     match(name, nameText, nameLabel);
}

上記のコードからわかるように、アイテム リスト ボックスにアイテムの名前も追加されます。これで、編集ボタンをクリックするとポップアップする別のウィンドウ フォームができました。編集フォームのアイテム リスト ボックスを、メイン ウィンドウ フォームのアイテム リスト ボックスとまったく同じように表示するにはどうすればよいですか?

基本的な質問では、アイテムのリストを編集フォームに転送するにはどうすればよいですか。winformに関係なく編集された情報を一定に保ちたいので、コンストラクターを介して渡してみました。コンストラクターは編集フォームで宣言されました:

public Edit(List<Item> i)
{
    itemList = i;
    InitializeComponent();
}

リストボックスをロードしたとき

foreach (Item i in itemList)
{
   itemListBox.Items.Add(i.Name);
}

リスト ボックスには、name の実際の値ではなく Name が表示されます。

更新 1:仕事がありません

更新 2:

私のメインのwinformコードhttp://pastebin.com/mENGKdnJ

winform の編集コードhttp://pastebin.com/tvp95jQW

ファイルを開くダイアログに注意を払わないでください コーディングの方法はまだわかりません。これまでのところ、このプログラムのコーディングは多くのことを教えてくれました。

4

1 に答える 1

2

リストを ref として送信する必要はありません。ref は (ポインター) インスタンス自体を変更する場合にのみ必要です。アイテムの追加/削除は、リスト インスタンスには影響しません。

更新しました:

リストボックスは ToString() を使用して項目の説明を表示します。

public class Item
{
    public string @Url;
    public string Name;
    public double Price;

    public Item(string @url, string name, double price)
    {
        this.Url = url;
        this.Name = name;
        this.Price = price;
    }


    public void setPrice(Button button)
    {
        this.Price = Convert.ToDouble(button.Text);
    }

    public override string ToString()
    {
        // example: return string.Format("{0} -> {1}", this.Name, this.Price);
        return this.Price;
    }

}

したがって、名前を追加するのではなく、オブジェクトを追加する必要があります

foreach (Item i in itemList)
{
   itemListBox.Items.Add(i);
}

中毒で(マイナーなヒント)

public class Item
{
    public string @Url {get; set;}
    public string Name {get; set;}
    public double Price {get; set;}

    public Item(string @url, string name, double price)
    {
        this.Url = url;
        this.Name = name;
        this.Price = price;
    }
}

SetPrice (double への変換はここに配置しないでください)

更新_ _ _ _ _ _ _ _ _ __ _ _

私はそれを見ると思います:

if (url.IsMatch(urlText.Text) && name.IsMatch(nameText.Text) && price.IsMatch(priceText.Text))
{
     itemListBox.Items.Add(nameText.Text);
     double item_Price = Convert.ToDouble(priceText.Text);
     items.Add(new Item(@itemURL.Text, itemName.Text, item_Price));
     nameText.Clear();
     priceText.Clear();
     urlText.Clear();
}

nameText .Text をリストボックスに追加しますが、 itemName .Text を item コンストラクターに渡します。

正規表現マッチャーのurlText .Textと同じですが、 itemURL .Text がコンストラクターに渡されます。

于 2013-08-27T19:10:26.763 に答える