1

winforms アプリでシート プランを動的にレンダリングしようとしています。これを処理する最善の方法がわかりません。

私は最初にこれで始めました

        string[] blocks = new string[6] { "A", "B", "C", "D", "E", "F" };
        int[] rows = new int[6] { 10, 6, 6, 10, 8, 8 };
        int[] seats = new int[6] { 15, 10, 10, 15, 25, 25 };

配列のサイズの行と座席の配列をループするだけであることを忘れています。実際には、列ごとに異なる数の座席と、ブロックごとに異なる数の列をレンダリングする必要があります。

したがって、上記のコード サンプルでは次のようになります。ブロック A は 10 列あり、各列は 15 席です。ブロック B には 6 列あり、各列には 10 席などがあります。

私のコードは、各座席のラベル コントロールをレンダリングします。

4

1 に答える 1

3

うーん、最初に構造体を作成する必要があります:

public struct Block
{
 public string Name { get; set; }
 public int Rows { get; set; }
 public int Seats { get; set; }
}

次に、データをリストとして入力します。

List<Block> blocks = new List<Block>
{
 new Block { Name = "A", Rows = 10, Seats = 15 },
 new Block { Name = "B", Rows =  6, Seats = 10 },
 new Block { Name = "C", Rows =  6, Seats = 10 },
 new Block { Name = "D", Rows = 10, Seats = 15 },
 new Block { Name = "E", Rows =  8, Seats = 25 },
 new Block { Name = "F", Rows =  8, Seats = 25 },
};

例として、フォームコントロール、安価なラベルを描画または作成します。

int selectedIndex = 3;

Block block = blocks[selectedIndex];

this.Text = "Block: " + block.Name; // Window Title = "Block: D"

for (int y = 0; y < block.Rows; y++)
{
 for (int x = 0; x < block.Seats; x++)
 {
  Label label = new Label();
  label.Left = x * 50;
  label.Top = y * 20;
  label.Width = 50;
  label.Height = 20;
  label.Text = "[" + (y + 1) + ", " + (x + 1) + "]";
  this.Controls.Add(label);
 }
}

より良い答えのために、より正確な質問をしてください;-)

于 2012-07-10T22:00:44.100 に答える