-3

あるフォームにボタンを配置したいのですが、それらをクリックすると、別のフォームのリストにアイテムが追加されます。

これは私の現在のコードです。このコードでは、ボタンはリストビューと同じ形式であり、新しいものに移動したいことに注意してください。

    private void button2_Click(object sender, EventArgs e)
    {
        listView1.Items.Add("Panama");
    }

    private void button3_Click(object sender, EventArgs e)
    {
        listView1.Items.Add("Brazil");
    }

    private void button4_Click(object sender, EventArgs e)
    {
        listView1.Items.RemoveAt(0);
    }

ボタンをクリックすると、別のフォームのリストにアイテムが追加されますか?

4

5 に答える 5

2

これを実現する 2 つの方法:

まず、他のフォームとそのリストビューへの参照を取得し、現在のフォームでボタンがクリックされたときにリストビューを呼び出して、アイテムをすぐに追加/削除します。

2 番目の使用イベント: ボタンがクリックされると、他のフォームによってサブスクライブされるイベントが発生し、ハンドラーで好きなことを行います (イベント データに従ってリスト ビューに項目を追加/削除するなど)。イベントについては、参照: http://msdn.microsoft.com/en-us/library/wkzf914z(v=vs.100).aspx

于 2013-09-05T04:27:31.397 に答える
2

Form1 と Form2 があり、Form1 にはボタンがあり、Form2 には ListView が含まれているとします。Form2 を作成する時点で、この Form2 のインスタンスへの参照を Form1 に保存する必要があります。

public class Form1
    {
        private Form2 form2;

        public Form1()
        {
            this.form2 = new Form1();
            this.form2.Show();
        }
    }

    public class Form2
    {
        public Form2()
        {

        }

        public void AddItemToListView(string itemName)
        {
            // Check if itemName is valid and add it to your listView
        }
        public void RemoveItemFromListViewAt(int position)
        {
            // Check if the position is valid and remove the item at the position
        }
    }          
于 2013-09-05T04:35:38.913 に答える
2

リストに項目を追加するためだけに、あるフォームから別のフォームを参照しないでください。:)

上記の Rex の回答から構築すると、ドメイン イベント パターン ( http://www.martinfowler.com/eaaDev/DomainEvent.html )を実装できます。

単純な (基本的な) 実装には、イベント/イベントの発生を管理するシングルトン クラスがあります。

using System;

/// <summary>
/// Class representing a single source for domain events within an application.
/// </summary>
public class DomainEventSource
{
    #region Fields

    private static readonly Lazy<DomainEventSource> source = new Lazy<DomainEventSource>( () => new DomainEventSource() );

    #endregion

    #region Properties

    /// <summary>
    /// Gets a reference to the singleton instance of the <see cref="DopmainEventSource"/> class.
    /// </summary>
    /// <value> A<see cref="DomainEventSource"/> object.</value>
    public static DomainEventSource Instance
    {
        get
        {
            return source.Value;
        }
    }

    #endregion

    #region Methods

    /// <summary>
    /// Method called to indicate an event should be triggered with a given item name.
    /// </summary>
    /// <param name="name">A <see cref="string"/> value.</param>
    public void FireEvent( string name )
    {
        if ( this.AddItem != null )
        {
            this.AddItem( source, new AddItemEvent( name ) );
        }
    }

    #endregion

    #region Events

    /// <summary>
    /// Event raised when add item is needed.
    /// </summary>
    public EventHandler<AddItemEvent> AddItem;

    #endregion
}

そして、次のようなイベントを配線して呼び出します。

DomainEventSource.Instance.AddItem += ( s, a ) => Console.WriteLine( "Event fired with name: " + a.ItemName );

DomainEventSource.Instance.FireEvent( "モノ" );

これにより、イベントはメモリ リークの簡単な原因になることに注意する必要があります。これを登録した場合は、必ず登録を解除してください。

于 2013-09-05T04:54:58.287 に答える
-2

フォームのlistViewを静的なものにする

public static ListView listview1=........

次に、次のような別のフォームからその ListView にアクセスできます

Form1.listview1.Add(値);

于 2013-09-05T04:25:26.377 に答える