Buenos días espero puedan ayudarme con mi consulta, deseo crear un menú para window form en tiempo de ejecución el menú lo creo desde una tabla en mi base de datos, hasta ahí no tengo problema ahora lo que deseo hacer es que mis submenus tengan una imagen, pero que también se creen como mis menús en tiempo de ejecución. Este es el código que uso para crear mis menús, espero puedan ayudarme con esta consulta ya sea con algún ejemplo, un link con algo parecido o alguna sugerencia muchas gracias.
Código HTML:
public partial class Form2 : Form
{
SqlConnection conn;
MenuStrip MnuStrip;
ToolStripMenuItem MnuStripItem;
public Form2()
{
InitializeComponent();
}
private void Form2_Load(object sender, EventArgs e)
{
this.IsMdiContainer = true;
MnuStrip = new MenuStrip();
this.Controls.Add(MnuStrip);
String conexion = ConfigurationManager.ConnectionStrings["cn"].ConnectionString;
conn = new SqlConnection(conexion);
String query = "select id_menu,des_menu,id_padre from tb_menu where id_padre = 0";
SqlDataAdapter da = new SqlDataAdapter(query, conn);
DataTable dt = new DataTable();
conn.Open();
da.Fill(dt);
foreach (DataRow dr in dt.Rows)
{
MnuStripItem = new ToolStripMenuItem();
MnuStripItem.Name = dr["id_menu"].ToString();
MnuStripItem.Text = dr["des_menu"].ToString();
SubMenu(MnuStripItem);
MnuStrip.Items.Add(MnuStripItem);
}
}
public void SubMenu(ToolStripMenuItem mnu)
{
String query = "select id_menu,des_menu,img_menu from tb_menu where id_padre='" + mnu.Name.ToString() + "'";
SqlDataAdapter da = new SqlDataAdapter(query, conn);
DataTable dt = new DataTable();
da.Fill(dt);
foreach (DataRow dr in dt.Rows)
{
ToolStripMenuItem ssmenu = new ToolStripMenuItem();
ssmenu.Name = dr["id_menu"].ToString();
ssmenu.Text = dr["des_menu"].ToString();
ssmenu.Click += new EventHandler(SubMenuClick);
mnu.DropDownItems.Add(ssmenu);
}
}
private void SubMenuClick(object sender, EventArgs e)
{
String query = "select url_menu from tb_menu where des_menu='" + sender.ToString() + "'";
SqlDataAdapter da = new SqlDataAdapter(query, conn);
DataTable dt = new DataTable();
da.Fill(dt);
Assembly frmAssembly = Assembly.LoadFile(Application.ExecutablePath);
foreach (Type type in frmAssembly.GetTypes())
{
if (type.BaseType == typeof(Form))
{
if (type.Name == dt.Rows[0]["url_menu"].ToString())
{
Form frmShow = (Form)frmAssembly.CreateInstance(type.ToString());
foreach (Form form in this.MdiChildren)
{
form.Close();
}
frmShow.MdiParent = this;
frmShow.WindowState = FormWindowState.Maximized;
frmShow.Show();
}
}
}
}
}