如何使一个窗体中的按钮影响另一个窗体的列表视图
本文关键字:窗体 另一个 列表 视图 影响 按钮 何使一 | 更新日期: 2023-09-27 18:30:10
我想在一个表单中有按钮,然后当我点击它们时,一个项目就会添加到另一个表单的列表中。
这是我当前的代码,请记住,在这段代码中,按钮的形式与列表视图相同,我想移动到一个新的:
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);
}
当单击按钮时,另一个表单中的列表将添加项目,我该如何操作?
您需要从调用操作的表单中引用其他表单。一种方法是将ListView公开为Form本身的属性,并通过Form 引用它
来自Form1
private void button4_Click(object sender, EventArgs e)
{
Form2Instance.MyListView.Items.RemoveAt(0);
}
在Form2中,添加以下包装以暴露原始列表查看
public ListView MyListView{get{return this.ListView1;}}
实现这一点的两种方法:
首先,您有一个对另一个表单及其列表视图的引用,并在当前表单中单击按钮时立即调用列表视图来添加/删除项目。
第二个使用事件:当按钮被点击时,引发一个由另一个表单订阅的事件,并在处理程序中执行任何您喜欢的操作(例如根据事件数据向列表视图添加/删除项目)。对于事件,参考:http://msdn.microsoft.com/en-us/library/wkzf914z(v=vs.100).aspx
假设您有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
}
}
请不要为了向列表中添加项目而从另一个表单引用一个表单。:)
在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");
有了这一点,您必须记住,事件很容易导致内存泄漏。如果您注册了它,请确保您注销了它。
make listView of form as a static one
公共静态ListView listview1=。。。。。。。。
然后您可以从另一个表单访问ListView,如下面的
Form1.listview1.Add(value);