0

現在のプロジェクトでは、「menuStrip」といくつかの「ToolStripMenuItem」を使用してMDIフォームを作成しました。いくつかのボタンとdevexpress「NavbarControl」

ユーザーがuserIDを使用してログインすると、アプリケーションはこの行の特定の「コントロール」のデータ行を取得します。真の場合はアイテムを表示する必要があり、そうでない場合はアイテムを非表示にする必要があります。

データ行には、アイテムの名前も含まれています。

だから私は使用します:

this.Controls[item].Visible = true;

item = string(アイテムの名前)

これを使用してメニューストリップ自体を非表示にした場合、MenuStipItemsで試してみると機能し、null参照例外が発生します。

アイテムの名前だけで、MenuStip内のアイテムを制御するにはどうすればよいですか?

コード:

    DataTable dt = GetData();
    foreach (DataRow row in dt.Rows)
    {
        string item = row["ItemNaam"].ToString();
        foreach (string rol in Rollen)
        {
            DataRow dr = GetDataByItemNaam(item);
            if (Convert.ToBoolean(dr[rol]) == true)
            {
                this.Controls[item].Visible = true; //Show Item
            }
        }
    }
4

2 に答える 2

1

MenuStripコントロールには、独自のコレクションがあります。したがって、メニューストリップの項目を参照するには、menustripの親からの項目を参照します。

if (this.menuStrip1.Items.ContainsKey(item))
  this.menuStrip1.Items[item].Visible = true;
于 2012-07-06T13:16:14.037 に答える
0

私は問題を解決しました:

foreachループ内にループを作成しましたforeach。各ループはアイテムの名前を検索し、次に前のアイテムのアイテムの名前を検索します。名前が指定された名前と一致する場合、可視性がtrueに設定されます。

これは2レベル用です。さらに、メニューの4レベルの項目にさらに深く(開始)foreach行くために、さらに2つのループを作成しました。

おそらくそれは正しい/最速の方法ではありませんが、それはそうあるべきように機能します。

于 2012-07-10T07:27:52.170 に答える