Вернуть программно экземпляр класса, но немного другой - PullRequest
0 голосов
/ 28 марта 2020

Во-первых, я полный Noob.

Вот моя проблема, у меня есть форма с TabPageControl и некоторыми TabPages.

Я создал класс "TabPageSelector". В этом классе я могу добавить, что TabPage имеет DataGridView, TextBox, ComboBox enz. Он также отслеживает, что является текущим TabPage. Например, в этом методе я хочу, чтобы TabPageSelector возвращал claas для TabPage1

private void cb_Members_SelectedIndexChanged(object sender, EventArgs e)
    {
        BaseTabPageHandler t = TabPageSelector.ReturnPageHandlerInstance();
        t.Members_SelectedIndexChanged(sender, e);
        _reloadDataGrid(t._baseSqlString());
    }

. Теперь у меня есть абстрактный класс "BaseTabPageHandler", а tabpage1Handler и tabpage2Handler - 2 tabpageHandlers совместно используют некоторый код, определенный в абстрактном классе

Теперь мой вопрос, как мне вернуть правильный класс и что я должен вернуть. Вернуть ли мне интерфейс или BaseTabPageHandler.

То, что у меня сейчас есть, не работает, потому что я не могу получить доступ к методу t._baseSqlString (). Этот метод объявлен в классе de tabpageHandles.

Members_SelectedIndexChanged (sender, e); работать, потому что я объявил его в de BaseTabPageHandler как метод

    public abstract class BaseTabPageHandler : ITabPageHandler
{
    public string cert { get; set; }
    public string type { get; set; }

    public abstract string _basesqlstring(int visible = 1);


    public void Members_SelectedIndexChanged(object sender, EventArgs e)
    {
        ComboBox cb = (ComboBox)sender;
        string _customerId = cb.SelectedItem.ToString().Substring(0, 7);
        string _customerName = cb.SelectedItem.ToString().Substring(10);
        Console.WriteLine(_customerName);
        if (_customerId == "0051956")
        {
            cert = "intersafe";
        }
        else
        {
            cert = "essilor";
        }
    }

    public void Search_TextChanged(object sender, EventArgs e, TextBox tb)
    {
        throw new NotImplementedException();
    }


}


public interface ITabPageHandler
{
    string cert { get; set; }
    string type { get; set; }

    string _basesqlstring(int visible = 1);

    void Members_SelectedIndexChanged(object sender, EventArgs e);

    void Search_TextChanged(object sender, EventArgs e, TextBox tb);
}


public class tabpage1Handler : BaseTabPageHandler, ITabPageHandler
{

    public override string _basesqlstring(int visible = 1)
    {
        return "where [safetycertificate] = '" + cert + "' and [usage] = '" + type + "' and [visible] = " + visible;
    }
}


public class tabpage2Handler : BaseTabPageHandler, ITabPageHandler
{

    public void GridView_DoubleClick(object sender, EventArgs e, DataGridView gv)
    {
        throw new NotImplementedException();
    }


    public override string _basesqlstring(int visible = 1)
    {
        return "where [safetycertificate] = '" + cert + "' and [usage] = '" + type;
    }
}


public class TabPageSelector
{
    static private Dictionary<string, DataGridView> _gridViews = new Dictionary<string, DataGridView>();
    static private Dictionary<string, TextBox> _TextBoxes = new Dictionary<string, TextBox>();
    static private Dictionary<string, TabPage> _TabPages = new Dictionary<string, TabPage>();
    static private string _currentTabPage;
    static private Employee _user;

    public static void AddUser(Employee user)
    {
        _user = user;
    }

    public static void AddTabPage(TabPage TP)
    {
        if (_user == null) throw new Exception("Please add the user to the selector before adding a TabPage!!!");
        string name = TP.Name.ToLower();
        if(_TabPages.ContainsKey(name) == false)
        {
            if (_TabPages.Count == 0) _currentTabPage = name;
            _TabPages.Add(name, TP);
            if(TP.Tag != null &&
               TP.Tag.ToString() == "IsAdmin" &&
               _user.IsAdmin == 0)
            {
                Console.WriteLine("TabPage ("+name+") Locked...");
                TP.Text = "*Blocked*";
                //TP.Visible = false; // this hides the controls on it.
                TP.Enabled = false; // this disables the controls on it
            }
        }
    }

    public static ITabPageHandler ReturnPageHandlerInstance()
    {
        string className = _currentTabPage + "Handler";
        string assemblyName = "BreukRegClassLibrary.TabPageHandlers."+className;

        Assembly assembly = Assembly.GetExecutingAssembly();
        ITabPageHandler t = assembly.CreateInstance(assemblyName) as ITabPageHandler;

        return t;
    }


    public static void SelectTabPage(string TabPage)
    {
        _currentTabPage = TabPage.ToLower();
    }

    public static void AddGridView(string TabPage, DataGridView DGV)
    {
        if(_gridViews.ContainsKey(TabPage.ToLower()) == false)
        {
            DGV.AutoSize = false;
            _gridViews.Add(TabPage, DGV);
        }
    }

    public static void AddTextBox(string TabPage, TextBox TB)
    {
        if (_TextBoxes.ContainsKey(TabPage.ToLower()) == false)
        {
            _TextBoxes.Add(TabPage, TB);
        }
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...