2014-01-03 5 views
0

Мне нужно поднять родителей SizeChange событие из моего пользовательского элемента управления (AdvancedButton). Мне нужно изменить размер моего пользовательского элемента, если размер контейнера будет изменен. Но я не знаю, как я могу получить доступ к контейнерам «events.I попробовал этот путь:Как получить доступ к событию контейнеров из пользовательского элемента управления?

public AdvancedButton() 
    {    
     Form1 frm = (Form1)this.FindForm(); 
     frm.SizeChanged += OnFormSizeChanged; 

     DoubleBuffered = true; 
     MouseDown += OnMouseDown; 
     MouseUp += OnMouseUp; 
     MouseMove += OnMouseMove; 
     Click += OnClick; 
    } 

    private void OnFormSizeChanged(object sender, EventArgs e) 
    { 
     this.Width += this.Width - 1; 
     this.Height += this.Height - 1; 
    } 

Но этот способ не работает, когда я пытаюсь запустить application.There это ошибки» текст: необработанное исключение типа «System.NullReferenceException» произошло в Kyrsovoi.exe

Я нашел один способ, который работает, но мне это не подходит, потому что здесь мы должны FindForm жет() в Form1.Designer.cs:

private void InitializeComponent() 
    { 
     ... 
     this.AdvancedButton1 = new WindowFormsApplication1.AdvancedButton(FindForm()); 
     ... 
    } 

MyButton.cs код:

public AdvancedButton(Form parent) 
    { 
     parent.SizeChanged += OnFormSizeChanged; 
     DoubleBuffered = true; 
     MouseDown += OnMouseDown; 
     MouseUp += OnMouseUp; 
     MouseMove += OnMouseMove; 
     Click += OnClick; 
    } 

    private void OnFormSizeChanged(object sender, EventArgs e) 
    { 
     this.Width += this.Width - 1; 
     this.Height += this.Height - 1; 
    } 

Пожалуйста, help.Maybe кто знает, какие способы решения этой задачи.

+4

Не делайте этого. Вместо этого используйте свойства «Anchor» или «Dock». – SLaks

ответ

0

Вы должны переместить родительский Событийный код OnParentChanged:

protected override void OnParentChanged(EventArgs e) 
{ 
    base.OnParentChanged(e); 

    if (this.Parent != null) 
    { 
     this.Parent.SizeChanged += OnFormSizeChanged; // this.ParentForm.SizeChanged += ... 
    } 
} 

void OnFormSizeChanged(object sender, EventArgs e) 
{ 
    // ... 
} 

Рассмотрите возможность использования свойства Anchor/Dock/Margin для разметки.

Смежные вопросы