0

次の目標でWindowsフォームアプリを作成しています。

ユーザーから(列挙されたリストから)一意の名前とカテゴリを持つ製品のリストを取得します(その後、いくつかのことを行いますが、これは質問とは関係ありません)。

テキストボックスに値を入力して、「n」個の製品を構成することをユーザーに指定してもらいたいという考えです。変数をこの値nに設定するメソッドを呼び出すテキストボックスのイベントハンドラーがあります。この値「n」は、ループカウンター、または何を持っているかとして使用されます。要点は、作成するボックスの数の境界を作成することです。

次に、(動的にnに基づいて)n個の(テキストボックス/コンボボックス)ペアをフォームに追加します。最後に作成したペアの下に別の(テキストボックス/コンボボックス)ペアを追加する余地がない場合は、別の列を作成する必要があります。

nには限りがありませんが、現実的には20を超えることはないでしょう。とにかく、これ以上の商品があれば対応できるようにしたいと思います。

コンボボックスのオプションは、実行時に渡される文字列リストから入力されますが、このフォームアプリケーションのインスタンスごとに、ボックスごとに一貫性があります。

モックアップ画像を入力しようとしましたが、評判ポイントを獲得するまでスタックオーバーフローが発生しません:(

以下のコードのようなものを使用していくつかのボックスを作成する方法を理解していますが、それは私が固執しているより細かい点です。誰か助けてもらえますか?

ありがとう!

`        private void Method1()
        {
            int boxes = Int32.Parse(NumProducts.Text);
            for (int i = 0; i < boxes; i++)
            {
                TextBox tb = new TextBox();
                tb.Location = new System.Drawing.Point(40, i * 20);
                tb.Name = "TextBoxName" + i.ToString();
                tb.Size = new System.Drawing.Size(184, 20);
                tb.TabIndex = i + 2;
                tb.Text = String.Empty;
                panel1.Controls.Add(tb);

            }
        }

        private void NumProducts_TextChanged(object sender, EventArgs e)
        {
            Method1();
        }`
4

3 に答える 3

0

行数を事前にユーザーに尋ねることは、ユーザビリティの観点からはあまり良くありません。

ユーザーが入力したときに新しいボックスを作成し続けるインターフェースを作成する必要があります.行」ボタン。

于 2012-05-02T16:29:07.533 に答える
0

レイアウトを実現するには、FlowLayoutPanelコントロールを使用し、既に行っているようにパネルではなく、これにコントロールを追加します。これにより、列の問題が透過的に処理され、ユーザーが予想される編集ボックスの最大数を超えた場合にスクロール バーが追加されます。FlowLayoutPanel に関する一般的な情報はこちら(および他の多くの情報)。

于 2012-05-02T16:36:21.553 に答える
0

ここでは、 DataGridViewの方が適しているように思えます。最初の列として DataGridViewTextBoxColumn を、2 番目の列として DataGridViewComboBoxColumn を使用して構成できます。最後の項目として「新しい行」をサポートします。

ドキュメントを読んでください。フォームにドロップして、それで遊んでください。

于 2012-05-02T16:37:32.293 に答える