C# 如何使一个窗体中的按钮影响另一个窗体中的listview?
我希望在一个表单中有按钮,然后当我单击它们时,一个项目被添加到另一个表单中的列表中 这是我当前的代码,请记住,在这段代码中,按钮的形式与listview相同,我想将其中一个移动到新的:C# 如何使一个窗体中的按钮影响另一个窗体中的listview?,c#,listview,C#,Listview,我希望在一个表单中有按钮,然后当我单击它们时,一个项目被添加到另一个表单中的列表中 这是我当前的代码,请记住,在这段代码中,按钮的形式与listview相同,我想将其中一个移动到新的: private void button2_Click(object sender, EventArgs e) { listView1.Items.Add("Panama"); } private void button3_Click(object sender,
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作为表单本身的属性公开,然后通过表单引用它 来自表格1
private void button4_Click(object sender, EventArgs e)
{
Form2Instance.MyListView.Items.RemoveAt(0);
}
在Form2中,添加以下包装以公开原始listView
public ListView MyListView{get{return this.ListView1;}}
将窗体的listView设置为静态窗体 公共静态ListView listview1= 然后您可以从另一个表单访问该列表视图,如下所示
Form1.listview1.Add(值) 实现这一点的两种方法: 首先,您有一个对另一个表单及其listview的引用,并在当前表单中单击按钮时调用listview以立即添加/删除项
第二个使用事件:单击按钮时,引发另一个表单订阅的事件,并在处理程序中执行任意操作(例如根据事件数据向列表视图添加/删除项)。对于事件,ref:假设您有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的答案,您可以实现域事件模式() 一个简单的(基本的)实现将有一个单例类来管理事件/触发事件:
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.FireEvent(“Thing”)
因此,您必须记住,事件很容易导致内存泄漏。如果您注册了它,请确保取消注册。它可以工作,但它会给我一个错误“ein.Form2.listView1”由于其保护级别而无法访问“我如何修复它?”?抱歉,这是我的第一个C#项目,请将其改为公共财产,以便您可以访问它。如果您的ListView被声明为私有属性,您将无法从类外部访问它Yeah!将所有内容都设置为静态也是一种选择。请记住,这将在多次打开和关闭的窗体之间保持状态。静态通常不是一个好主意
DomainEventSource.Instance.AddItem += ( s, a ) => Console.WriteLine( "Event fired with name: " + a.ItemName );