0
フォームの名前とイベントの名前をデータベースに保存しています。フォームのメニュー項目とサブメニューをデータベースから取得しました。子供のクリック時にデータベースからイベント名を取り出し、変数に格納しました。その変数にあるそのイベントを呼び出します。この子供のクリックでデータベースからイベントを呼び出す
チェック:
// on form load
private void MainForm_Load(object sender, EventArgs e)
{
MnuStrip = new MenuStrip();
base.Controls.Add(this.MnuStrip);
MnuStrip.BackColor = Color.FromArgb(4, 71, 3);
MnuStrip.ForeColor = Color.Orange;
MnuStrip.Font = new Font("Arial", 12);
string selectCommandText = "select Main_menu,Manu_Par_value,Status from MenuParent where Status='Y'";
SqlDataAdapter adapter = new SqlDataAdapter(selectCommandText, con);
DataTable dataTable = new DataTable();
con.Open();
adapter.Fill(dataTable);
foreach (DataRow row in dataTable.Rows)
{
this.MnuStripItem = new ToolStripMenuItem(row["Main_menu"].ToString());
this.SubMenu(this.MnuStripItem, row["Manu_Par_value"].ToString());
MnuStrip.Items.Add(this.MnuStripItem);
}
base.MainMenuStrip = MnuStrip;
con.Close();
}
//submenu loads
public void SubMenu(ToolStripMenuItem mnu, string submenu)
{
//SqlDataAdapter adapter = new SqlDataAdapter("SELECT FRM_NAME FROM vw_pagerole WHERE MENUPARVAL='" + submenu + "' and status = 1 and UID = '" + Username + "' ", con);
SqlDataAdapter adapter = new SqlDataAdapter("select mp.Main_menu, msm.Form_code, msm.form_Name, r.u_name from MenuParent mp ,MenuSubmenue msm, Rights r where mp.Manu_Par_value = msm.Manu_Par_value and mp.Manu_Par_value = r.Manu_Par_value and msm.menue_submenue_code = r.menue_submenue_code and r.Rights_invisible = 1 and mp.Main_menu='" + mnu + "' and r.u_name = '" + Username + "' ", con);
DataTable dataTable = new DataTable();
adapter.Fill(dataTable);
foreach (DataRow row in dataTable.Rows)
{
ToolStripMenuItem item = new ToolStripMenuItem(row["form_Name"].ToString(), null, new EventHandler(ChildClick));
mnu.DropDownItems.Add(item);
}
}
//on child click
string eventclick; //event name stored in this string
private void ChildClick(object sender, EventArgs e)
{
string query = ("select Form_code from MenuSubmenue where form_Name='" + sender.ToString() + "'");
SqlCommand cmdd = new SqlCommand(query, con); con.Open();
var dbr = cmdd.ExecuteReader();
while (dbr.Read())
{
eventclick = (string)dbr["Form_code"];
label1.Text = eventclick;
}
con.Close();
}
は、私はあなたが名前でメソッドを呼び出すためにreflectionを使用することができ、文字列型変数名eventclickに
親愛なる私は、データベースに格納されaddprofiletoolstripmenuitem_clickと私は今、私はこのイベントを呼びたい、変数にフェッチ、このようなイベントがあります:コードの後には、その後
eventclick
変数で定義された名前のメソッドを実行します。変数にイベントを列挙したいプライベートボイドaddProfileToolStripMenuItem_Click(オブジェクト送信者、のEventArgs電子) {profileform PF =新しいprofileform {profileTypeが= 1、 MdiParent =この }。 pf.Show(); } –@MUHAMMADSOHAIL:私のソリューションはうまくいくはずです。ただし、メソッド名では大文字と小文字が区別されるため、データベースには 'addprofiletoolstripmenuitem_click'ではなく 'addProfileToolStripMenuItem_Click'が含まれている必要があります。 –
はいそれはいくつかのmenuesのthanks.butで動作します。mscorlib.dllで 'System.Reflection.TargetInvocationException'タイプの最初のチャンス例外が発生しました。 追加情報:例外が呼び出しのターゲットによってスローされました。 –