テーブル レイアウト コントロールを含むフォームがあります。テーブル レイアウトには、3 つの列といくつかの行があります。
最初の列にはラベルが含まれ、2 番目の列はテキストボックス、コンボボックス、または日時ピッカーのいずれかです。3 番目の列には、ユーザーが入力した情報にエラーが含まれている場合にオンまたはオフに切り替わる画像が含まれています。これは、間違って入力したフィールドや見逃したフィールドを確認できるようにするためです。
5 行目には、ユーザーが入力するトランザクションの種類を選択できるコンボボックスが含まれています。ユーザーの選択内容によっては、コントロールを再配置する必要がある場合があります。
スクリーンショットを使用した例を示しましょう。
http://i.stack.imgur.com/OZmFH.png
これは実行中のフォームの標準バージョンであり、ユーザーはトランザクション タイプを選択していません。
ここで、ユーザーがローンの支払いを選択したとします。フォームは次のように再配置されます。
http://i.stack.imgur.com/j76wG.png
説明文と総額が数行下に移動し、新しいボックスが表示されて、ユーザーがローンと支払い回数を選択できるようになっていることがわかります。
選択した取引タイプに応じて、3 つの異なるレイアウトを表示できます。
現時点では、Transaction Type コンボボックスの SelectedIndexChanged イベントをチェックしてこれを行い、メソッドを呼び出してビューをセットアップします。
これを達成するための最良の方法は何ですか? 現在、それを行うコードがありますが、非常に面倒です。
テーブル レイアウト パネル以外の何かを見る必要がありますか?
読み取り専用 TableLayoutPanelCellPosition tlCCccLbl = new TableLayoutPanelCellPosition(0, 5); 読み取り専用 TableLayoutPanelCellPosition tlCCccList = new TableLayoutPanelCellPosition(1, 5); 読み取り専用 TableLayoutPanelCellPosition tlCCccError = new TableLayoutPanelCellPosition(2, 5); 読み取り専用 TableLayoutPanelCellPosition tlCCnarrativeLbl = new TableLayoutPanelCellPosition(0, 6); 読み取り専用 TableLayoutPanelCellPosition tlCCnarrativeTxt = new TableLayoutPanelCellPosition(1, 6); 読み取り専用 TableLayoutPanelCellPosition tlCCgrossLbl = new TableLayoutPanelCellPosition(0, 7); 読み取り専用 TableLayoutPanelCellPosition tlCCgrossTxt = new TableLayoutPanelCellPosition(1, 7); 読み取り専用 TableLayoutPanelCellPosition tlCCgrossError = new TableLayoutPanelCellPosition(2, 7); 読み取り専用 TableLayoutPanelCellPosition tlStdnarrativeLbl = new TableLayoutPanelCellPosition(0, 5); 読み取り専用 TableLayoutPanelCellPosition tlStdnarrativeTxt = new TableLayoutPanelCellPosition(1, 5); 読み取り専用 TableLayoutPanelCellPosition tlStdgrossLbl = new TableLayoutPanelCellPosition(0, 6); 読み取り専用 TableLayoutPanelCellPosition tlStdgrossTxt = new TableLayoutPanelCellPosition(1, 6); 読み取り専用 TableLayoutPanelCellPosition tlStdgrossError = new TableLayoutPanelCellPosition(2, 6); 読み取り専用 TableLayoutPanelCellPosition tlStdLoanPymntsLbl = new TableLayoutPanelCellPosition(0, 8); 読み取り専用 TableLayoutPanelCellPosition tlStdLoanPymntsCmb = new TableLayoutPanelCellPosition(1, 8); 読み取り専用 TableLayoutPanelCellPosition tlStdLoanPymntsError = new TableLayoutPanelCellPosition(2, 8); 読み取り専用 TableLayoutPanelCellPosition tlStdLoanLbl = new TableLayoutPanelCellPosition(0, 9); 読み取り専用 TableLayoutPanelCellPosition tlStdLoanError = new TableLayoutPanelCellPosition(2, 9); 読み取り専用 TableLayoutPanelCellPosition tlStdccLbl = new TableLayoutPanelCellPosition(0, 10); 読み取り専用 TableLayoutPanelCellPosition tlStdccList = new TableLayoutPanelCellPosition(1, 10); 読み取り専用 TableLayoutPanelCellPosition tlStdccError = new TableLayoutPanelCellPosition(2, 10); 読み取り専用 TableLayoutPanelCellPosition tlLnLoanLbl = new TableLayoutPanelCellPosition(0, 5); 読み取り専用 TableLayoutPanelCellPosition tlLnLoanCmb = new TableLayoutPanelCellPosition(1, 5); 読み取り専用 TableLayoutPanelCellPosition tlLnLoanError = new TableLayoutPanelCellPosition(2, 5); 読み取り専用 TableLayoutPanelCellPosition tlLnLoanPymntsLbl = new TableLayoutPanelCellPosition(0, 6); 読み取り専用 TableLayoutPanelCellPosition tlLnLoanPymntsCmb = new TableLayoutPanelCellPosition(1, 6); 読み取り専用 TableLayoutPanelCellPosition tlLnLoanPymntsError = new TableLayoutPanelCellPosition(2, 6); 読み取り専用 TableLayoutPanelCellPosition tlLnnarrativeLbl = new TableLayoutPanelCellPosition(0, 7); 読み取り専用 TableLayoutPanelCellPosition tlLnnarrativeTxt = new TableLayoutPanelCellPosition(1, 7); 読み取り専用 TableLayoutPanelCellPosition tlLngrossLbl = new TableLayoutPanelCellPosition(0, 8); 読み取り専用 TableLayoutPanelCellPosition tlLngrossTxt = new TableLayoutPanelCellPosition(1, 8); 読み取り専用 TableLayoutPanelCellPosition tlLngrossError = new TableLayoutPanelCellPosition(2, 8); private void cmbTransactionType_SelectedIndexChanged (オブジェクト送信者、EventArgs e) { ToggleLoanControls(false); ToggleCreditCardControls(false); ToggleReceiptNumbers(); if (clsTransactionTypes.TransactionStringToTransactionID(cmbTransactionType.Text) == clsTransactionTypes.LoanPayments || clsTransactionTypes.TransactionStringToTransactionID(cmbTransactionType.Text) == clsTransactionTypes.HpPayment) ToggleLoanControls(真); それ以外の場合 (clsTransactionTypes.TransactionStringToTransactionID(cmbTransactionType.Text) == clsTransactionTypes.TransferToCreditCardCard) ToggleCreditCardControls(真); SetupViews(cmbTransactionType.Text); } private void SetupViews(string transactionTypeSelected) { if (transactionTypeSelected == "クレジットカードへの支払い") SetupCreditCardsLayouts(); else if(transactionTypeSelected == "HP 支払い" || transactionTypeSelected == "ローン支払い") SetupLoanLayouts(); そうしないと 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); }
このコードは、不要なコントロールをテーブルの一番下に移動し、必要なコントロールを上に移動することで機能します。そうすれば、テーブルに隙間がなくなります。たとえば、ローン コンボボックスの可視性を単にオンまたはオフにしたくはありません。トランザクション タイプと 2 つの行の説明の間にギャップが生じるからです。とにかくコンパクトにしたい。
現在のシステムの唯一の問題は、下部に非表示のコントロールを含む空の行があることです。また、行を追加するのも困難です。移動を処理するすべてのコードを変更しなければならないからです。
ここまで読んでくれてありがとう。
>ふぅ<
ありがとう
トグル コントロール メソッドはリストされていません。基本的に、可視性を必要としないコントロールのオン/オフを切り替えます。