我希望在一个表单中有按钮,然后当我点击它们时,一个项目被添加到另一个表单的列表中。
这是我当前的代码,请记住,在此代码中,按钮与listview的格式相同,我想要移动到新的代码:
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);
}
单击按钮时如何执行此操作,另一种形式的列表会添加项目?
答案 0 :(得分:2)
您需要从调用操作的表单中引用其他表单。 一种方法是将ListView作为Form本身的属性公开,并通过Form
引用它来自Form1
private void button4_Click(object sender, EventArgs e)
{
Form2Instance.MyListView.Items.RemoveAt(0);
}
在Form2中添加以下包装器以显示原始listView
public ListView MyListView{get{return this.ListView1;}}
答案 1 :(得分:2)
实现这一目标的两种方法:
首先你引用另一个表单及其列表视图,并在当前表单中单击按钮时调用listview直接添加/删除项目。
第二次使用事件:当点击按钮时,引发一个由另一个表格订阅的事件,并在处理程序中,做任何你喜欢的事情(例如根据事件数据添加/删除项目到列表视图) 。对于活动,参考:http://msdn.microsoft.com/en-us/library/wkzf914z(v=vs.100).aspx
答案 2 :(得分:2)
假设你有Form1和Form2,其中Form1是带按钮的那个,Form2包含ListView。在创建Form2时,您必须在Form1中保存对此Form2实例的引用。
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
}
}
答案 3 :(得分: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(“Thing”);
有了这个,你必须记住,事件是内存泄漏的一个简单来源。如果您注册了这个,请确保取消注册。
答案 4 :(得分:-2)
将表单列表视为静态表单
public static ListView listview1 = ........
然后您可以从其他表单访问该ListView,如下所示
Form1.listview1.Add(值);