我在这里查看了类似的问题,但答案与我的问题无关。
我是C#的新手,正在使用Windows表单。
如屏幕截图所示,我有form1、UserControl1和UserControl2。
Form1有两个按钮(ShowUserControl1和ShowUserControl2)和DataGridView。
UserControl1有一个“AddRow”按钮和一个文本框。
UserControl2没有任何内容。
我点击“ShowUserControl2”按钮,ShowUserControl2出现,然后我点击“ShowUserControl1”按钮,ShowUserControl1出现,接着我在UserControl1中的文本框中输入文本,然后点击“AddRow”,一个新行被添加并且运行正常。
现在问题来了:
当我点击“ShowUserControl1”,然后点击“ShowUserControl2”,再次点击“ShowUserControl1”,然后输入文本,再点击一次“AddRow”,DataGridView中就会同时添加两行。如果我点击“ShowUserControl1”三次,然后点击一次“AddRow”,DataGridView中就会同时添加三行,以此类推。
我认为Form1中的事件处理程序(HandleTheEvent)会被执行多次,因为我在“ShowUserControl1”之间多次切换用户控件。如何防止事件多次触发?请帮忙解决。 谢谢。Form1:
public partial class Form1 : Form
{
UserControl1 UC1 = new UserControl1();
UserControl2 UC2 = new UserControl2();
public Form1()
{
InitializeComponent();
}
private void Form1_Load(object sender, EventArgs e)
{
//add user controls when form loads
Controls.Add(UC1);
Controls.Add(UC2);
}
private void ShowUC(Control value) // Show/hide User Controls
{
UC1.Visible = false;
UC2.Visible = false;
value.Visible = true;
}
public void HandleTheEvent(object sender, EventArgs e) //deal with the event
{
dataGridView1.Rows.Add(1, UC1.ReturnData, 3);
}
private void ShowUserControl1_Click(object sender, EventArgs e)
{
ShowUC(UC1); //show User Control1
UC1.UserControl1Event += new EventHandler(HandleTheEvent);
}
private void ShowUserControl2_Click(object sender, EventArgs e)
{
ShowUC(UC2); //show User Control2
}
}
UserControl1:
public partial class UserControl1 : UserControl
{
public event EventHandler UserControl1Event;
public UserControl1()
{
InitializeComponent();
}
public string ReturnData
{
get { return textBox1.Text; }
}
private void AddRow_Click(object sender, EventArgs e)
{
UserControl1Event(this, e);
}
}
UC1.UserControl1Event -= new EventHandler(HandleTheEvent); UC1.UserControl1Event += new EventHandler(HandleTheEvent);
。 - Giorgi Nakeuri