如何在C#中调用Resize事件

时间:2017-02-17 21:11:17

标签: c# events

我的英语不是很好

嗨,我是C#的新事件,我想用2个按钮创建开关,我想调用Resize,但我不能。我想让自己调整大小。

    public abstract class SwitchBase : Control
    {
    private Button first;
    private Button second;


    public SwitchBase()
    {
        InitializeMySwitch();
    }

    private void InitializeMySwitch()
    {

        Controls.Add(first = new Button());
        Controls.Add(second = new Button());

        //first
        first.Text = "first";

        //second
        second.Text = "second";
        second.Location = new System.Drawing.Point(first.Location.X + first.Width, first.Location.Y);

    }


    public delegate void ChangedEventHandler(object source, EventArgs args);

    public event ChangedEventHandler Changed;

    protected virtual void OnSwitchChanged()
    {
        if (Changed != null)
            Changed(this, EventArgs.Empty);
    }

    public delegate void ResizeEventHandler(object source, EventArgs args);

    public event ResizeEventHandler Resize;

    protected virtual void OnResize()
    {
            Resize(this, EventArgs.Empty);
    }

}



public class Switch : SwitchBase
{
    public Switch()
    {

    }

    protected override void OnSwitchChanged()
    {
        base.OnSwitchChanged();
    }

    protected override void OnResize()
    {
        base.OnResize();
    }
}

在另一个按钮中,我改变了开关的大小

1 个答案:

答案 0 :(得分:0)

通过阅读您的代码,我通过“调用调整大小”来收集您的意思是提升事件。你正在做的是正确的...虽然应该注意到默认的事件实现,如果没有订阅者,它将为null ...

事实上,另一个主题可能是取消订阅。因此,建议是复制。

您可以按照以下方式执行此操作:

var resize = Resize;
if (resize != null)
{
    resize(this, EventArgs.Empty)
}

应该注意的是,上面的代码会调用事件的订阅者,但不会导致cotrol调整大小。如果你想要的是改变你的控件的大小,那么这样做:

this.Size = new Size(400, 200);

或者:

this.Width = 400;
this.Height = 200;

注意:我不知道您正在使用的Control课程。特别是,如果它是System.Windows.Forms.Control,它已经有Resize个事件,因此您不会定义自己的事件。您有可能使用的Control班级甚至没有SizeWidthHeight

修改:System.Web.UI.Control没有Resize,也没有SizeWidthHeight。但是System.Windows.Controls.ControlWidthHeight甚至认为它没有Resize