У меня есть форма, в которой есть элемент управления макетом таблицы. Макет таблицы состоит из 3 столбцов и ряда строк.
Первый столбец содержит метку, второй - текстовое поле, поле со списком или указатель даты и времени. Третий столбец содержит изображение, которое включается или выключается, если введенная пользователем информация содержит ошибки. Это позволит им увидеть, какие поля они заполнили неправильно или пропустили.
Пятая строка содержит поле со списком, в котором пользователь может выбрать тип транзакции, которую он вводит. В зависимости от того, что пользователь выбирает, элементы управления могут быть переупорядочены.
Позвольте мне показать пример с использованием скриншотов:
http://i.stack.imgur.com/OZmFH.png
Это стандартная версия запущенной формы, пользователь не выбрал тип транзакции.
Теперь предположим, что пользователь выбирает платеж по кредиту. Форма будет переоформлена, чтобы показать следующее:
http://i.stack.imgur.com/j76wG.png
Вы можете видеть, что повествование и брутто сдвинулись на пару строк, и было показано новое окно, позволяющее пользователю выбрать ссуду и количество осуществляемых платежей.
В зависимости от выбранного типа транзакции могут быть представлены 3 различных макета.
Сейчас я делаю это, проверяя событие SelectedIndexChanged в поле типа транзакции comboBox и вызываю метод для настройки представления.
Каков наилучший способ достичь этого? Сейчас у меня есть код, который делает это, но он невероятно грязный.
Должен ли я взглянуть на что-то другое, кроме панели макета таблицы?
readonly TableLayoutPanelCellPosition tlCCccLbl = new TableLayoutPanelCellPosition(0, 5);
readonly TableLayoutPanelCellPosition tlCCccList = new TableLayoutPanelCellPosition(1, 5);
readonly TableLayoutPanelCellPosition tlCCccError = new TableLayoutPanelCellPosition(2, 5);
readonly TableLayoutPanelCellPosition tlCCnarrativeLbl = new TableLayoutPanelCellPosition(0, 6);
readonly TableLayoutPanelCellPosition tlCCnarrativeTxt = new TableLayoutPanelCellPosition(1, 6);
readonly TableLayoutPanelCellPosition tlCCgrossLbl = new TableLayoutPanelCellPosition(0, 7);
readonly TableLayoutPanelCellPosition tlCCgrossTxt = new TableLayoutPanelCellPosition(1, 7);
readonly TableLayoutPanelCellPosition tlCCgrossError = new TableLayoutPanelCellPosition(2, 7);
readonly TableLayoutPanelCellPosition tlStdnarrativeLbl = new TableLayoutPanelCellPosition(0, 5);
readonly TableLayoutPanelCellPosition tlStdnarrativeTxt = new TableLayoutPanelCellPosition(1, 5);
readonly TableLayoutPanelCellPosition tlStdgrossLbl = new TableLayoutPanelCellPosition(0, 6);
readonly TableLayoutPanelCellPosition tlStdgrossTxt = new TableLayoutPanelCellPosition(1, 6);
readonly TableLayoutPanelCellPosition tlStdgrossError = new TableLayoutPanelCellPosition(2, 6);
readonly TableLayoutPanelCellPosition tlStdLoanPymntsLbl = new TableLayoutPanelCellPosition(0, 8);
readonly TableLayoutPanelCellPosition tlStdLoanPymntsCmb = new TableLayoutPanelCellPosition(1, 8);
readonly TableLayoutPanelCellPosition tlStdLoanPymntsError = new TableLayoutPanelCellPosition(2, 8);
readonly TableLayoutPanelCellPosition tlStdLoanLbl = new TableLayoutPanelCellPosition(0, 9);
readonly TableLayoutPanelCellPosition tlStdLoanError = new TableLayoutPanelCellPosition(2, 9);
readonly TableLayoutPanelCellPosition tlStdccLbl = new TableLayoutPanelCellPosition(0, 10);
readonly TableLayoutPanelCellPosition tlStdccList = new TableLayoutPanelCellPosition(1, 10);
readonly TableLayoutPanelCellPosition tlStdccError = new TableLayoutPanelCellPosition(2, 10);
readonly TableLayoutPanelCellPosition tlLnLoanLbl = new TableLayoutPanelCellPosition(0, 5);
readonly TableLayoutPanelCellPosition tlLnLoanCmb = new TableLayoutPanelCellPosition(1, 5);
readonly TableLayoutPanelCellPosition tlLnLoanError = new TableLayoutPanelCellPosition(2, 5);
readonly TableLayoutPanelCellPosition tlLnLoanPymntsLbl = new TableLayoutPanelCellPosition(0, 6);
readonly TableLayoutPanelCellPosition tlLnLoanPymntsCmb = new TableLayoutPanelCellPosition(1, 6);
readonly TableLayoutPanelCellPosition tlLnLoanPymntsError = new TableLayoutPanelCellPosition(2, 6);
readonly TableLayoutPanelCellPosition tlLnnarrativeLbl = new TableLayoutPanelCellPosition(0, 7);
readonly TableLayoutPanelCellPosition tlLnnarrativeTxt = new TableLayoutPanelCellPosition(1, 7);
readonly TableLayoutPanelCellPosition tlLngrossLbl = new TableLayoutPanelCellPosition(0, 8);
readonly TableLayoutPanelCellPosition tlLngrossTxt = new TableLayoutPanelCellPosition(1, 8);
readonly TableLayoutPanelCellPosition tlLngrossError = new TableLayoutPanelCellPosition(2, 8);
private void cmbTransactionType_SelectedIndexChanged(object sender, EventArgs e)
{
ToggleLoanControls(false);
ToggleCreditCardControls(false);
ToggleReceiptNumbers();
if (clsTransactionTypes.TransactionStringToTransactionID(cmbTransactionType.Text) == clsTransactionTypes.LoanPayments || clsTransactionTypes.TransactionStringToTransactionID(cmbTransactionType.Text) == clsTransactionTypes.HpPayment)
ToggleLoanControls(true);
else if(clsTransactionTypes.TransactionStringToTransactionID(cmbTransactionType.Text) == clsTransactionTypes.TransferToCreditCardCard)
ToggleCreditCardControls(true);
SetupViews(cmbTransactionType.Text);
}
private void SetupViews(string transactionTypeSelected)
{
if (transactionTypeSelected == "Payment to Credit Card")
SetupCreditCardsLayouts();
else if(transactionTypeSelected == "HP Payment" || transactionTypeSelected == "Loan Payment")
SetupLoanLayouts();
else
SetupStandardLayouts();
}
private void SetupLoanLayouts()
{
tableBank1Income.SetCellPosition(panelLoans, tlLnLoanCmb);
tableBank1Income.SetCellPosition(lblLoans, tlLnLoanLbl);
tableBank1Income.SetCellPosition(lblErrorLoanName, tlLnLoanError);
tableBank1Income.SetCellPosition(cmbNumberOfLoanPayments, tlLnLoanPymntsCmb);
tableBank1Income.SetCellPosition(lblLoanPayments, tlLnLoanPymntsLbl);
tableBank1Income.SetCellPosition(lblErrorLoanPayments, tlLnLoanPymntsError);
tableBank1Income.SetCellPosition(txtTransactionGross, tlLngrossTxt);
tableBank1Income.SetCellPosition(lblTransactionAmount, tlLngrossLbl);
tableBank1Income.SetCellPosition(lblErrorTransactionGross, tlLngrossError);
tableBank1Income.SetCellPosition(txtTransactionNarrative, tlLnnarrativeTxt);
tableBank1Income.SetCellPosition(lblTransactionNarrative, tlLnnarrativeLbl);
tableBank1Income.SetCellPosition(panelCreditCards, tlStdccList);
tableBank1Income.SetCellPosition(lblCreditCard, tlStdccLbl);
tableBank1Income.SetCellPosition(lblCCError, tlStdccError);
}
private void SetupStandardLayouts()
{
tableBank1Income.SetCellPosition(txtTransactionGross, tlStdgrossTxt);
tableBank1Income.SetCellPosition(lblTransactionAmount, tlStdgrossLbl);
tableBank1Income.SetCellPosition(lblErrorTransactionGross, tlStdgrossError);
tableBank1Income.SetCellPosition(txtTransactionNarrative, tlStdnarrativeTxt);
tableBank1Income.SetCellPosition(lblTransactionNarrative, tlStdnarrativeLbl);
tableBank1Income.SetCellPosition(txtTransactionGross, tlStdgrossTxt);
tableBank1Income.SetCellPosition(lblTransactionAmount, tlStdgrossLbl);
tableBank1Income.SetCellPosition(lblErrorTransactionGross, tlStdgrossError);
tableBank1Income.SetCellPosition(panelLoans, tlStdLoanLbl);
tableBank1Income.SetCellPosition(lblLoans, tlStdLoanLbl);
tableBank1Income.SetCellPosition(lblErrorLoanName, tlStdLoanError);
tableBank1Income.SetCellPosition(cmbNumberOfLoanPayments, tlStdLoanPymntsCmb);
tableBank1Income.SetCellPosition(lblLoanPayments, tlStdLoanPymntsLbl);
tableBank1Income.SetCellPosition(lblErrorLoanPayments, tlStdLoanPymntsError);
tableBank1Income.SetCellPosition(panelCreditCards, tlStdccList);
tableBank1Income.SetCellPosition(lblCreditCard, tlStdccLbl);
tableBank1Income.SetCellPosition(lblCCError, tlStdccError);
lblCCError.Visible = false;
lblErrorLoanName.Visible = false;
lblErrorLoanPayments.Visible = false;
}
private void SetupCreditCardsLayouts()
{
tableBank1Income.SetCellPosition(panelCreditCards, tlCCccList);
tableBank1Income.SetCellPosition(lblCreditCard, tlCCccLbl);
tableBank1Income.SetCellPosition(lblCCError, tlCCccError);
tableBank1Income.SetCellPosition(txtTransactionGross, tlCCgrossTxt);
tableBank1Income.SetCellPosition(lblTransactionAmount, tlCCgrossLbl);
tableBank1Income.SetCellPosition(lblErrorTransactionGross, tlCCgrossError);
tableBank1Income.SetCellPosition(txtTransactionNarrative, tlCCnarrativeTxt);
tableBank1Income.SetCellPosition(lblTransactionNarrative, tlCCnarrativeLbl);
tableBank1Income.SetCellPosition(panelLoans, tlStdLoanLbl);
tableBank1Income.SetCellPosition(lblLoans, tlStdLoanLbl);
tableBank1Income.SetCellPosition(lblErrorLoanName, tlStdLoanError);
tableBank1Income.SetCellPosition(cmbNumberOfLoanPayments, tlStdLoanPymntsCmb);
tableBank1Income.SetCellPosition(lblLoanPayments, tlStdLoanPymntsLbl);
tableBank1Income.SetCellPosition(lblErrorLoanPayments, tlStdLoanPymntsError);
}
Код работает, перемещая ненужные элементы управления внизу таблицы и перемещая необходимые элементы вверх. Таким образом, в таблице нет пробелов. например Я не хотел бы просто включать и выключать видимость комбинированного списка Loan, потому что тогда будет разрыв между типом транзакции и описанием двух строк. Я всегда хочу, чтобы это было максимально компактно.
Единственная проблема с текущей системой - это пустые строки внизу, содержащие невидимые элементы управления. Также сложно добавлять строки, так как мне нужно пойти и изменить весь код, который связан с перемещением вещей.
Спасибо за чтение, если вы зайдете так далеко.
есть> фу
Спасибо
Методы управления переключениями не перечислены. Они в основном включают / выключают элементы управления, которые не нуждаются в видимости.