簡體   English   中英

在不知道發送者對象名稱的情況下更改其屬性

[英]Changing properties of the sender object without knowing its name

我正在嘗試更改網格中PictureBox的背景色。 PictureBox是數組的一部分,並且該數組具有chared事件處理程序。 我很難根據單擊的內容來更改不同的PictureBox。

這是我到目前為止的內容:

private PictureBox[,] GameGrid = new PictureBox[20, 20];

    public frmGame()
    {
        int x = 10;
        int y = 10;
        for (int i = 0; i < 20; i++)
        {

            for (int j = 0; j < 20; j++)
            {
                GameGrid[i, j] = new System.Windows.Forms.PictureBox();
                setUpPicBox(x, y, i, j);
                x += 11;
            }
            y += 11;
            x = 10;
        }
        InitializeComponent();
    }


    public void setUpPicBox(int x, int y, int i, int j)
                {
                    this.GameGrid[i, j].Location = new System.Drawing.Point(x, y);
                    this.GameGrid[i, j].Size = new System.Drawing.Size(10, 10);
                    this.GameGrid[i, j].BackColor = Color.Black;
                    this.GameGrid[i, j].Name = "btnGrid" + i + "-" + j;
                    this.GameGrid[i, j].Visible = true;
                    this.GameGrid[i, j].CreateGraphics();
                    this.GameGrid[i, j].Click += new System.EventHandler(this.picturebox_Click);
                    this.Controls.Add(GameGrid[i, j]);
                }

    private void picturebox_Click(object sender, EventArgs e)
    {

    }</code>

任何幫助,將不勝感激

事件處理程序的sender參數是引發事件的實例。 這是用戶單擊的PictureBox實例。 如果要更改其BackColor,只需將發送方對象強制轉換為正確的類型並設置新的顏色。

private void picturebox_Click(object sender, EventArgs e)
{
    var pictureBox = sender as PictureBox;
    if (pictureBox != null) {
        pictureBox.BackColor = Color.Blue;
    }
}

在事件處理程序上,發送方包含導致事件處理程序啟動的對象。 因此,通過將其轉換為正確的類型,我們可以按照以下示例訪問所有屬性:

private void picturebox_Click(object sender, EventArgs e)
{
     PictureBox pic = (PictureBox)sender;
     MessageBox.Show(pic.Name);
}

注意:代碼未經測試,無法訪問VS進行測試

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM