我已经将Click-event的EventHandler添加到了一个图片框但是在运行时这个处理程序从不被调用(调试器显示它直接添加到控件中,但是当我点击图片框时没有任何反应)。
我认为它与我的继承有关。我有一个名为AbstractPage的usercontrol(它不是真的抽象,因为设计师不喜欢它),它只包含一个标题和这个图片框,但它提供了实际页面所依赖的一些功能。
#region Constructor
public AbstractPage()
{
InitializeComponent();
lblHeading.Text = PageName;
picLock.Click += new EventHandler(picLock_Click);
}
#endregion
#region Events
void picLock_Click(object sender, EventArgs e)
{
...do some stuff
}
#endregion
页面实现只是继承了这个类并添加了它们的控件和行为。我们最近发现子类化UserControl并不具备性能,我们在那里失去了一些性能,但它是最好的方法(我不希望c& p函数为25页并维护它们)。
我的网页A看起来像这样
public partial class PageA : AbstractPage
{
#region Constructor
public PageA()
{
// I dont call the base explicitely since it is the
// standard constructor and this always calls the base
InitializeComponent();
}
#endregion
public override string PageName
{
get { return "A"; }
}
public override void BindData(BindingSource dataToBind)
{
...
}
无论如何, picLock_Click 从未被调用过,我不知道为什么?
这些页面都被放入一个PageControl,它包含一个TreeView和一个TabContainer,一旦我调用addPage(IPage),就会放置页面
public partial class PageControl {
...
protected virtual void AddPages()
{
AddPage(new PageA());
AddPage(new PageD());
AddPage(new PageC());
...
}
protected void AddPage(IPage page)
{
put pagename to treeview and enable selection handling
add page to the tabcontainer
}
提前致谢
答案 0 :(得分:1)
如果我理解你的问题,这对我开箱即用(使用VS2k8)。我的代码:
public partial class BaseUserControl : UserControl
{
public BaseUserControl()
{
InitializeComponent(); //event hooked here
}
private void showMsgBox_Click(object sender, EventArgs e)
{
MessageBox.Show("Button clicked");
}
}
public partial class TestUserControl : BaseUserControl
{
public TestUserControl()
{
InitializeComponent();
}
}
我将TestUserControl移动到表单,单击按钮并按预期获得消息框。你可以粘贴一些代码,例如你如何使用你的AbstractPage?
答案 1 :(得分:1)
我发现了问题。我们正在使用Infragistics WinForms,但在这种情况下我使用了标准的图片框。我用UltraPictureBox替换它,现在它可以工作。