0

C# を使い始めたばかりで、この特定の部分コード (より正確にlblArr[i, j].Click += pnlArr_Click;は行)に行き詰まり続けています。

public void CreateLabelArray(int height, int width, int nrofShips)
    {
        pnlBase.Controls.Clear();
        lblArr = new Label[height, width];
        int xpos = 0;
        int ypos = 0;

        for (int j = 0; j < width; j++)
            {
            int column = j + 1;
            for (int i = 0; i < height; i++)
                {
                Coordinaat pos = new Coordinaat();
                pos.X = j;
                pos.Y = i;
                lblArr[i, j] = new Label();
                lblArr[i, j].Left = xpos;
                lblArr[i, j].Top = ypos;
                lblArr[i, j].Width = 35;
                lblArr[i, j].Height = 35;
                lblArr[i, j].Tag = pos;
                lblArr[i, j].Click += pnlArr_Click;
                lblArr[i, j].BackColor = System.Drawing.Color.LightBlue;
                lblArr[i, j].BorderStyle = BorderStyle.FixedSingle;

                pnlBase.Controls.Add(lblArr[i, j]);
                xpos += 0;
                ypos += lblArr[i, j].Height;

                }
            xpos += 35;
            ypos = 0;
            }
    }

配列内のラベルでどの特定のマウス ボタンが押されたかを調べようとしているときに、この方法が機能する可能性があると考えました。

public int pnlArr_Click(object sender, MouseEventArgs e)

MouseEventArgs を EventArgs に変更するとエラーはなくなりますが、これはもう機能しません。

if (e.Button == MouseButtons.Left)

何か案は?すべての助けに感謝します。

4

3 に答える 3

1

( で定義されている) のClickイベントのシグネチャは次のとおりです。LabelControl

public event EventHandler Click;

MouseEventArgsだから、それはかかりませんEventArgs

MouseDownイベントを見るべし。

于 2012-04-19T13:01:30.863 に答える
0

2 番目の引数として MouseEventArgs を受け取るイベントは、Click イベントでは
なく、MouseDown イベントです。このようにコードを変更します (また、読みやすくするために、pnlArr_MouseDown のイベント ハンドラーの名前を変更します)。

lblArr[i, j].MouseDown += pnlArr_Click; 
于 2012-04-19T13:00:17.417 に答える
0

有効なパターンを使用して使用できEventArgsます

Control.MouseButtons

またはMouseDownイベントを利用します。

于 2012-04-19T13:01:35.897 に答える