0

主キー インデックスと strUsername を持つデータベース行があり、これらを使用してメニュー ストリップにドロップダウン項目を動的に生成しています。このコードは、ドロップダウン項目にユーザー名文字列をテキスト値として指定し、イベント ハンドラーを作成します。主キーの整数をクリック イベント メソッドに渡したいのですが、取得したコードはすべてのクリック イベント メソッドにデータベースrow.count値を与えます。誰でも助けてもらえますか?

//  Generate drop down items from database

daUsers.Fill(dtUsers);

// Update mnuFileNew drop down list
if (dtUsers.Rows.Count != 0)
{
    mnuFileNew.DropDownItems.Clear();

    foreach (dbAutoBloggerDataSet.dbTblUsersRow row in dtUsers.Rows)
    {
        ToolStripMenuItem newItem = new ToolStripMenuItem(row.strUsername);
        newItem.Click += new EventHandler((sender, e) => mnuFileNewUser_Click(sender, e, row.nId));
        mnuFileNew.DropDownItems.Add(newItem);
    }
}

//  Drop down item event handler
private void mnuFileNewUser_Click(object sender, EventArgs e, int nId)
{
    frmLogin frmLogin = new frmLogin(nId);
    DialogResult result = frmLogin.ShowDialog();
    if (result == DialogResult.OK)
    {
        frmProfile frmProfile = new frmProfile(frmLogin.nId);
        frmProfile.ShowDialog();
        screenRefresh();
    }
}
4

1 に答える 1

0

このサンプルコードは便利だと思います

void AddMenuItem(string text, string action)
{
   ToolStripMenuItem item = new ToolStripMenuItem();
   item.Text = text;
   item.Click += new EventHandler(item_Click);
   item.Tag = action;

   //first option, inserts at the top
   //historyMenu.Items.Add(item);

   //second option, should insert at the end
   historyMenuItem.DropDownItems.Insert(historyMenuItem.DropDownItems.Count, item);
}

private void someHistoryMenuItem_Click(object sender, EventArgs e)
{
   ToolStripMenuItem menuItem = sender as ToolStripMenuItem;

   string args = menuItem.Tag.ToString();

   YourSpecialAction(args);
}
于 2013-02-08T19:23:27.867 に答える