无法在C#

时间:2016-11-10 16:02:48

标签: c# events onclick user-controls click

我动态添加了UserControl

var listItem = new ListItem(/* arguments */);
listItem.Click += SetListItemColor;

panel.Controls.Add(listItem); // "panel" is FlowLayoutPanel

SetListItemColor:

private void SetListItemColor(object sender, EventArgs e)
{
    var listItem = (ListItem)sender;
    if (listItem.BackColor == Color.LightGray)
    {
        listItem.BackColor = Color.White;
    }
    else
    {
        listItem.BackColor = Color.LightGray;
    }
}

单击UserControl时,颜色没有变化。但是,出于测试目的,我尝试将事件更改为EnabledChanged并更改Enabled属性,颜色确实发生了变化:

var listItem = new ListItem(/* arguments */);
listItem.Enabled = false;
listItem.EnabledChanged += SetListItemColor;
listItem.Enabled = true;

panel.Controls.Add(listItem);

问题是什么?

1 个答案:

答案 0 :(得分:1)

编辑: 由于对接在FlowLayoutPanel中不起作用,建议将控件的大小设置为面板的大小。将ListItem边距设置为空,如下所示,以获得最大填充。对于调试设置backcolor不同,以确保您可以看到它:

        var listItem = new ListItem(/* arguments */);
        listItem.BackColor = Color.Yellow; // Debugging only
        listItem.Margin = Padding.Empty;
        listItem.Size = panel.Size;
        listItem.Click += SetListItemColor;

请注意,如果调整控件的大小,则需要再次调整ListItem的大小。