0

私はビジュアルC#に非常に慣れていません

(映画館のように)チケット予約システムを作りたいのですが、パネルを使用して座席を作成しました。各座席は40 * 40

これが私のコードです:

private void panel2_Paint(object sender, PaintEventArgs e)
{
    int a, b;

    for (a = 0; a <= 1; a++)
    {
        for (b = 0; b < 12; b++)
        {

            Graphics g = e.Graphics;
            g.FillRectangle(new SolidBrush(Color.White), b * 40, a * 40, 40, 40);
            g.DrawRectangle(new Pen(Color.Black), b * 40, a * 40, 40, 40);

        }
    }
}

次に、マウスクリックで各座席の色を変更して、選択されている座席を表示します。しかし、これまでのところ運はありません

4

2 に答える 2

1

選択したシートごとに個別のコントロールを作成し、クリックイベントを処理することをお勧めします。この例では、に24を追加PictureBox'sしましたPanel。次に、それらのインデックスをTagコントロールのプロパティに配置し、一般的なクリックイベントハンドラーをアタッチしました。Boolまた、選択したステータスを追跡するために配列を使用しています。

public partial class Form1 : Form
{
    bool[] selected = new bool[24];
    public Form1()
    {
        InitializeComponent();
        foreach (PictureBox  pb in panel1.Controls)
        {
            pb.Click += new EventHandler(pictureBox_Click);
        }
    }

    private void pictureBox_Click(object sender, EventArgs e)
    {
        PictureBox pb = (PictureBox)sender;
        int index ;
        if (int.TryParse(pb.Tag.ToString(), out index))
        {
            if (selected[index])
            {
                selected[index] = false;
                pb.BackColor = Color.White;
            }
            else
            {
                selected[index] = true;
                pb.BackColor = Color.Red;
            }
        }
    }
}

ブール配列を作成して座席の状態を格納し、パネルのMouseDownイベントを使用して変数を設定し、座席に関連付けられている画面の長方形を無効にする場合は、持っているものを使用できます。

このようなもの。

public partial class Form1 : Form
{
    bool[,] selected = new bool[2,12];
    public Form1()
    {
        InitializeComponent();
    }

    private void panel1_Paint(object sender, PaintEventArgs e)
    {
        int a, b;

        for (a = 0; a <= 1; a++)
        {
            for (b = 0; b < 12; b++)
            {

                if (selected[a, b])
                {
                    e.Graphics.FillRectangle(new SolidBrush(Color.Red), b * 40, a * 40, 40, 40);

                }
                else
                {
                    e.Graphics.FillRectangle(new SolidBrush(Color.White ), b * 40, a * 40, 40, 40);
                }
                e.Graphics.DrawRectangle(new Pen(Color.Black), b * 40, a * 40, 40, 40);

            }
        } 

    }

    private void panel1_MouseDown(object sender, MouseEventArgs e)
    {
        int xPos, yPos;
        xPos = e.X / 40;
        yPos = e.Y / 40;

        if ((xPos > 11) || (yPos > 1)) return;

        if(selected[yPos,xPos])
            selected[yPos, xPos] = false;
        else
            selected[yPos, xPos] = true;

        ((Panel)sender).Invalidate(new Rectangle(xPos * 40,yPos *40,40,40)) ;
    }
}
于 2012-08-11T19:11:05.083 に答える
1

オブジェクトを使用Graphicsしてフォームに直接描画するのではなく、 OnMouseClickイベントが発生したときに、選択したシートに対応するコントロールのBackColorプロパティを設定するだけで解決できる場合があります。

于 2012-08-11T07:41:48.747 に答える