میتونی برای اونها هم رویداد جدا بنویسی.

flowLayoutPanel1.SuspendLayout();
for (int i = 0; i <= objDataTable.Rows.Count; i++)
{
MyUserControl.MyUser user = new MyUserControl.MyUser();
user.FullName = objDataTable.Rows[i]["name"].ToString() + objDataTable.Rows[i]["family"].ToString();
user.Phone = objDataTable.Rows[i]["phone"].ToString();
user.ID = objDataTable.Rows[i]["id"].ToString();
MemoryStream ms = new MemoryStream((byte[])(objDataTable.Rows[i]["photo"]));
user.Photo = Image.FromStream(ms);
user.DoubleClick += new EventHandler(user_DoubleClick);
foreach (Control c in user.Controls)
{
c.DoubleClick += new EventHandler(c_DoubleClick);
}
flowLayoutPanel1.Controls.Add(user);
}
flowLayoutPanel1.ResumeLayout(true);

این هم متدهای رویدادها. در متد مربوط به رویداد لیبل ها و پیکچر باکس میتوان از طریق Parent این کنترل ها به یوزرکنترل دست پیدا کرد. Parent همان یوزرکنترل هست.

void user_DoubleClick(object sender, EventArgs e)
{
MyUserControl.MyUser muc = sender as MyUserControl.MyUser;
MessageBox.Show(muc.FullName);
}
void c_DoubleClick(object sender, EventArgs e)
{
Control doubleClickedControl = sender as Control;
MyUserControl.MyUser muc = doubleClickedControl.Parent as MyUserControl.MyUser;
MessageBox.Show(muc.FullName);
}