2016-11-10 48 views
0

我有一个动态添加UserControl不能提高一个用户控件的单击事件在C#

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); 

什么问题?

+0

您应该添加委托和事件处理程序。尝试此链接: http://stackoverflow.com/questions/2920145/how-to-work-with-delegates-and-event-handler-for-user-control –

+0

@VinhVu,感谢您花时间帮帮我。为什么我需要创建一个自定义事件,如果有一个内置的?特别是当其他事件**做**工作时。 – Sipo

+0

我只是试过,它的工作原理。你是否将你的listItem对接到你的面板,以确保你实际上点击了UserControl而不是面板? –

回答

1

编辑: 由于停靠在FlowLayoutPanel中不起作用,因此建议将控件的大小设置为面板的大小。将ListItem边距设置为空,以获得最大填充。为调试设置不同,以确保背景色,你可以看到它:

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

注意,如果控件大小,您将需要重新调整你的列表项。

+0

现在控件根本不显示。 – Sipo

+0

用'DockStyle.Bottom'尝试过,它显示为黄色,但没有发生点击。 – Sipo

+0

该面板是一个“FlowLayoutPanel”,如果它有帮助... – Sipo