Во-первых, я полный 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);
}
}
}