0

実行時に多数のパネルを作成するメソッドをアプリケーションに作成しました。パネルを作成するループ内で、作成されたパネルのいずれかでのマウス ポインターの位置に基づいてツールチップの位置を制御するパネル MouseMove イベントを作成しました。

コンパイル時にこのエラーが発生します。これは別のコンストラクター内での作成であることを理解していますが、私の人生では、イベントハンドラー内からインスタンスpnlOverviewに到達する方法を理解できません。pnlOverview

誰かが私を正しい方向に向けることができますか?

これは、あなたが見る必要があると思うコードです:

    public void CreatePanels()
    {
        int PanelPosX = 50;
        int PanelPosY = 500;
        int LabelPosX = 10;
        int LabelPosY = 10;

        for (int i = 0; i < (Convert.ToInt32(txtNoOfPanels.Text)); i++)
        {
            // Create a new panel, each with a unique label identifying the inspector

            Panel pnlOverview = new Panel();
            pnlOverview.Name = "InspectorPanel" + (i + 1).ToString();
            pnlOverview.Text = "Inspector Panel " + (i+1).ToString();
            pnlOverview.Location = new Point(PanelPosX, PanelPosY);
            pnlOverview.Size = new Size(1200, 180);
            pnlOverview.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle;
            Controls.Add(pnlOverview);
            pnlOverview.Paint += new PaintEventHandler(newPanelPaint);

            // Create a MouseMove event for each panel created
            pnlOverview.MouseMove += new MouseEventHandler(pnlOverview_OnMouseMove);

            Label lblInspectorName = new Label();
            lblInspectorName.Name = "InspectorName" + (i+1).ToString();
            lblInspectorName.Text = " Inspector " + (i+1).ToString();
            lblInspectorName.Width = 100;
            lblInspectorName.Height = 13;
            lblInspectorName.Location = new Point(LabelPosX, LabelPosY);
            lblInspectorName.Size = new Size(82, 13);
            pnlOverview.Controls.Add(lblInspectorName);

            PanelPosY += 190;
        }
        return;
    }

    // Show a tooltip
    public void pnlOverview_OnMouseMove(object sender, MouseEventArgs e)
    {
        toolTip1.Show("HELLO", this, new Point(pnlOverview.Left + e.X + 1, pnlOverview.Top + e.Y + 1), int.MaxValue);
    }
4

1 に答える 1

1

pnlOverviewこれは CreatePanels() のローカル変数であるため、MouseMove ハンドラーのスコープには含まれません。

senderマウスを移動しているコントロールである必要がありますが、適切なタイプにキャストする必要があります。

于 2013-03-28T20:42:49.570 に答える