Я добавил EventHandler для события Click-event в кадр, но во время выполнения этот обработчик никогда не вызывается (отладчик показывает мне, что он добавлен в элемент управления напрямую, но когда я нажимаю на картинку, ничего не происходит).
Я предполагаю, что это имеет какое-то отношение к моему наследованию. У меня есть usercontrol под названием AbstractPage (его не абстрактно, так как разработчику это не нравится), который состоит только из заголовка и этого окна, но он обеспечивает довольно некоторые функции, на которые полагаются фактические страницы.
#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 страницах и поддерживала их).
Моя страница выглядит так:
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
}
Заранее спасибо
Я нашел проблему. Мы используем Infragistics WinForms, но в этом случае я использовал стандартный кадр. Я заменил его на UltraPictureBox, и теперь он работает.
Если я правильно понимаю вашу проблему, это сработало для меня из коробки (используя 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?