0

これは長い話ではありません!! ただ長いようです;)

私のアプリではuser access、ユーザーアクセススコープに関連するボタンへのアクセスを意味します。

winform レイヤー: フォームがあります。決定されたすべてのボタンの名前がパーティション化されたcheckedListboxesに表示されます。フォームに手動で入力したくありません。コードでcheckedListboxesを作成したい。アイテムのテキストを取得するには、以下の計画を立てています。

clssMenu_Item:このクラスで 1 つのボタンのプロパティをname保存できます。text

public class clssMenu_Item
{
    public string name;
    public string text;
}

clssMenu_List:それは私に 2D generic を与えますList<clssMenu_Item>。1 つのフォーム内のすべてのボタンが、このクラスのオブジェクトになります。

public class clssMenu_List
{
    public clssMenu_List ()
    {
           // I dont know how fill private variables     
    }
    #region private variables
        private List<clssMenu_Item> _main ; // buttons in main form
        private List<clssMenu_Item> _accountancy; //buttons in accountancy form
        private List<clssMenu_Item> _management; //buttons in management form
    #endregion 
    #region public properties

        public List<clssMenu_Item> main
        { get { return _main; } }

        public List<clssMenu_Item> accountancy
        { get { return _accountancy; } }

        public List<clssMenu_Item> management
        { get { return _management; } }

    #endregion
}

各フォームのボタンには、共通の文字がありますName property。たとえば、メイン フォームの決定されたボタンはすべて「Mbtn」で始まるため、フォーム間で同じボタンの名前はありません。
にプライベート変数を入力する方法がわかりませんclssMenu_List。次に、ファサードレイヤーで使用できます。

ご清聴ありがとうございました!それを解決するのを手伝ってください

4

1 に答える 1

0

フォームからすべてのボタンを抽出する別のヘルパー クラスを作成します。

public static class FormHelper
{
    public static Button[] GetButtonsFromForm(Form form)
    {
        // ...
    }
}

フィールドの代わりにプロパティを作成します。

public class clssMenu_Item
{
    public string Name {get;set;}
    public string Text {get;set;}
}

menu_items を作成するメソッド:

public IEnumerable<clssMenu_Item> GetMenuItemsFromForm(Form form)
{
   // convert the buttons to menu_items
   return from button in FormHelper.GetButtonsFromForm(form);
          select new clssMenu_Item { Name = button.Name, Text = button.Text };
}

次に、すべてのボタンを右側のリストに追加します。

public void Fill()
{
    clssMenu_List lst = new clssMenu_List();

    clssMenu_List.main.AddRange(GetMenuItemsFromForm(mainForm));
    clssMenu_List.accountancy.AddRange(GetMenuItemsFromForm(accountancyForm));
    clssMenu_List.management.AddRange(GetMenuItemsFromForm(managementForm));

}

クラスでリストを作成することを忘れないでください。

    private List<clssMenu_Item> _main = new List<classMenu_Item>(); // buttons in main form
    private List<clssMenu_Item> _accountancy = new List<classMenu_Item>(); //buttons in accountancy form
    private List<clssMenu_Item> _management = new List<classMenu_Item>(); //buttons in management form

個人的に:

名前でアクセスできるので、辞書に保存します。また、リスト型のプロパティは作成しません。Add/Remove メソッドを作成したいと思います。

于 2013-08-28T08:24:23.197 に答える