C# 仅检测控制高度的变化

C# 仅检测控制高度的变化,c#,winforms,C#,Winforms,是否有一种方法可以检测何时只更改控件的高度,而不使用变量保存以前的控件高度?我有一些代码,我只想在控件的高度改变时执行,但即使宽度改变,SizeChanged事件也会被触发 不使用变量保存以前的控制高度 您可以使用单个变量,只需使用字典即可。试试这个例子: public partial class Form1 : Form { private Dictionary<Control, int> heights = new Dictionary<Control, int&g

是否有一种方法可以检测何时只更改控件的高度,而不使用变量保存以前的控件高度?我有一些代码,我只想在控件的高度改变时执行,但即使宽度改变,SizeChanged事件也会被触发

不使用变量保存以前的控制高度

您可以使用单个变量,只需使用字典即可。试试这个例子:

public partial class Form1 : Form
{
    private Dictionary<Control, int> heights = new Dictionary<Control, int>();

    public Form1()
    {
        InitializeComponent();
        foreach (Control control in Controls)
        {
            heights.Add(control, control.Height);
        }
    }

    private void button1_Resize(object sender, System.EventArgs e)
    {
        var control = (Control) sender;
        var oldHeight = heights[control];
        if (control.Height != oldHeight)
        {
            heights[control] = control.Height;

            // handle your resize
        }
    }
}
公共部分类表单1:表单
{
私有字典高度=新字典();
公共表格1()
{
初始化组件();
foreach(控件中的控件)
{
添加(控制,控制.高度);
}
}
私有无效按钮1\u调整大小(对象发送方,System.EventArgs e)
{
变量控制=(控制)发送方;
var oldHeight=高度[控制];
如果(control.Height!=oldHeight)
{
高度[控制]=控制高度;
//处理您的大小调整
}
}
}

缓存旧高度值时,您不喜欢什么?比如使用变量存储以前的高度?+1对于解决方案,我建议只存储控件名,而不是将
control
添加到字典
heights.Add(control.name,control.height)谢谢您的解决方案。我正在用字典编写一些非常相似的代码。我想没有办法使用variable@H.Tran您不想使用变量或集合有什么具体原因吗?@Kurubaran您能提供一个我的方法存在问题的示例吗?@Kurubaran没有原因..只是想看看是否有更干净的选项