【发布时间】:2011-12-30 05:03:26
【问题描述】:
C#已经转到great lengths to ensure that you cannot "fire" an event,例如:
form.FormClosed(this, new FormClosedEventArgs(CloseReason.UserClosing));
button.Click(this, new EventArgs());
customer.AddressChanged(this, new EventArgs());
不要编译,因为你不能以这种方式触发事件。
这似乎是语言设计者有意识的决定。他们似乎有意阻止“不良行为”。
我正在尝试找到 预期的替代品。
实例:
void ShowPopup(Form form)
{
ToolStripDropDown toolDrop = new ToolStripDropDown();
ToolStripControlHost toolHost = new ToolStripControlHost(form);
toolHost.Margin = new Padding(0);
toolDrop.Padding = new Padding(0);
toolDrop.Items.Add(toolHost);
toolDrop.Closed += toolDrop_Closed;
toolDrop.Show(screenLocation);
}
void toolDrop_Closed(object sender, ToolStripDropDownClosedEventArgs e)
{
//The form's FormClosed event doesn't fire when shown as a popup
//Fire the event manually
form.FormClosed(this, new FormClosedEventArgs(CloseReason.UserClosing));
}
如果我不应该从对象外部触发事件 - 打算替换它的技术是什么?
如果没有打算替换触发事件,是否有任何文章、书籍或第 9 频道视频解释了我应该如何处理这种情况?
【问题讨论】:
-
我认为这与此无关。 NET,本身;而是对象成员可访问性的函数。
标签: c#