Прежде всего я хотел бы, чтобы вы подготовились.
Я начал программировать только около 6 недель назад. Я прошу прощения, если последует что-нибудь достойное.
Мне было интересно, можно ли передать только часть имени элемента управления?
Это идея:
У меня две команды, класс настроен так:
public class Team
{
int _established; //could be string
string _name;
double _best
}
//Snip
У меня есть 2 набора форм, одинаковых для ввода, но единственное отличие - имена:
//Team 1
team1Year.Text = "";
team1Name.Text = "";
team1Numericupdown.Value = 0;
//Team 2
team2Year.Text = "";
team2Name.Text = "";
team2Numericupdown.Value = 0;
Так что, по сути, это то же самое. Мне было интересно, если можно создать метод, который будет делать следующее:
//Snip
Team team1 = new Team()
Team team2 = new Team()
//Not specific to problem, values can be anything
team1.estYear = 2008;
team1.Name = "Teamname1";
team1.Best = 137.8;
team2.estYear = 2009;
team2.Name = "GenericName";
team2.Best = 134.3;
private void HowToMethod(string tm, Team values)
{
//so it would become like this - replace team1 and team2 with an argument
tmYear.Text = values;
tmName.Text = values;
tmNumericupdown.Value = values;
}
А на практике:
HowToMethod(team1, team1.estYear)
//Output: team1Year.Text = 2008;
HowToMethod(team1, team1.Name)
//Output: team1Name.Text = Teamname1;
HowToMethod(team2, team2.Best)
//Output: team2Numericupdown.Value = 134.3;
Это не обязательно, мне просто интересно, возможно ли такое. Я в порядке, не имея решения этого. Существуют различные элементы управления / формы, но не все они одинаковые, но они принадлежат к одной и той же «группе» по имени.
Надеюсь, это не слишком запутало.
EDIT1:
Так что я старался быть менее запутанным. Опять же, я прошу прощения за лицо. Английский тоже не мой родной язык, что тоже не помогает. В любом случае, вот оно:
Это работает, но для меня это выглядит как повторяющийся код.
Мне было интересно, если есть более простое решение
... это не продвинутая тема
private void button1_Click(object sender, EventArgs e)
{
//Just one example. It's about manipulating Forms/Controls via code
//Lock Team1's controls
team1Year.Enabled = false;
team1Name.Enabled = false;
team1NumericUpDown.Enabled = false;
//Lock Team 2's Controls
team2Year.Enabled = false;
team2Name.Enabled = false;
team2NumericUpDown.Enabled = false;
}
private void button2_Click(object sender, EventArgs e)
{
//Another button unlocks
//Unlock Team1's controls
team1Year.Enabled = true;
team1Name.Enabled = true;
team1NumericUpDown.Enabled = true;
//Unlock Team 2's Controls
team2Year.Enabled = true;
team2Name.Enabled = true;
team2NumericUpDown.Enabled = true;
}
Хорошо, так что вышеприведенное работает - вручную выберите элементы управления, которые мы хотим отключить
Может ли это быть что-то вроде это:
Извиняюсь, если не использую надлежащие типы объектов
private void MyMethod(int X, bool isItEnabled)
{
//This feels so, so wrong
Control ctrl = sender as Control;
team{X}Year.Enabled ;
team{X}Name.Enabled = {isItEnabled};
team{X}NumericUpDown.Enabled = {isItEnabled};
}
//In action:
private void button1_Click(object sender, EventArgs e)
{
MyMethod(1, false)
//Would mean/become:
team{1}Year.Enabled = {false};
team{1}Name.Enabled = {false};
team{1}NumericUpDown.Enabled = {false};
//Or if the method was implemented differently:
private void MyMethod(string prefix, bool isItEnabled)
{
{prefix}Year.Enabled ;
{prefix}Name.Enabled = {isItEnabled};
{prefix}NumericUpDown.Enabled = {isItEnabled};
}
// В действии:
MyMethod(team2, true)
//Would mean:
{team2}Year.Enabled = {true};
{team2}Name.Enabled = {true};
{team2}NumericUpDown.Enabled = {true};
Таким образом, переданные аргументы могут заменить только часть имени элемента управления
если они имеют общее последовательное имя
В заключение:
** Можно ли ввести переменную для замены части кода на модульность **:
// Превращение идеи в метод будет вторичным
может стать:
X = "team1";
Properties.Settings.Default.{X}Totals;
{X}Year.Text = "";
{X}Name.Text = "";
{X}Whatever.Text = "";
{X}NumericUpDown.Value = 135;
Я знаю, что это работает с классами:
private void TeamStuff(Team teamID, string value1, string value2)
{
teamID.Year = value;
teamID.Name = value;
//...etc
}
//then
TeamStuff (team1, "sample", "GenericName");
//becomes
team1.Year = "sample";
team1.Name = "GenericName";