亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

在 C# WinForm 中單擊 PicutreBox 時將 List<Object>

在 C# WinForm 中單擊 PicutreBox 時將 List<Object>

C#
隔江千里 2023-09-09 16:48:24
我正在嘗試編寫一個 WinForm 應用程序來跟蹤我的照片、照片的發布位置以及照片中的人物。我已經使用這些信息創建了一個 SQL 后端數據庫。我創建了一個模型(非編程人員)類來構造該對象,然后創建了一個連接類,該連接類連接到數據庫并執行查詢并使用數據庫中的值創建一個列表。我能夠在 flowpanel 布局中生成一組圖像,循環訪問并抓取照片。從 Form1_Load 的同一部分,我可以將列表中的每個元素輸出到控制臺。我遇到的問題是將這些值傳遞給 PictureBox1_Click 處理程序。我可以毫無問題地獲取 URL,因為它是 PictureBox 對象的一部分,但我不知道如何獲取與我單擊發送的給定照片關聯的整個 Model 對象。目的是,當我單擊照片時,布局中的文本標簽應填充數據庫中的名稱、位置、日期等值。我嘗試將整個列表傳遞給單擊處理程序,但失敗了,我嘗試從加載事件重載傳遞給單擊事件,這給了我在圖片框上投射錯誤。    private void PictureBox1_Click(object sender, EventArgs e)    {        PictureBox p = (PictureBox)sender;        string j = p.ImageLocation;        MfNameTxt.Text = "Chris";        MessageBox.Show("Clicked! " + j);    }    private void Form1_Load(object sender, EventArgs e)    {        daoConn dc = new daoConn();        List<Model> models = new List<Model>();        string url;        string fName;        models = dc.GetAllModels();        foreach (Model m in models)        {            int tempValue;            tempValue = 1;            PictureBox pb = new PictureBox();            url = baseUrl + m.MhsUrl;            fName = m.mFirstName;            Size size = new Size(100, 100);            pb.ImageLocation = url;            pb.Size = size;            pb.Click += new EventHandler(PictureBox1_Click);            pb.SizeMode = PictureBoxSizeMode.Zoom;            modelHsFlowLayout.Controls.Add(pb);        }    }當我嘗試 pb.Click += new EventHandler((s, e1) => this.PictureBox1_Click(sender, e, tempValue)); 時 只是為了發送一個臨時值并演示我可以在那里傳遞一些東西,我得到了案例錯誤:Message=Unable to cast object of type '_pictures_v2.Form1' to type 'System.Windows.Forms.PictureBox'。
查看完整描述

1 回答

?
侃侃爾雅

TA貢獻1801條經驗 獲得超16個贊

這是因為在示例代碼中,sender 被傳遞,而不是傳遞 s。另外你應該傳入 e1 而不是 e。


這將給出以下代碼:


pb.Click += new EventHandler((s, e1) => this.PictureBox1_Click(s, e1, tempValue))

您還可以使用閉包,而不是將點擊處理代碼提取到單獨的函數中,它可以全部內聯完成。


例如:


private void Form1_Load(object sender, EventArgs e)

    {


        daoConn dc = new daoConn();

        List<Model> models = new List<Model>();

        string url;

        string fName;

        models = dc.GetAllModels();



        foreach (Model m in models)

        {

            int tempValue;

            tempValue = 1;

            PictureBox pb = new PictureBox();

            url = baseUrl + m.MhsUrl;

            fName = m.mFirstName;

            Size size = new Size(100, 100);

            pb.ImageLocation = url;

            pb.Size = size;

            pb.Click += (s,clickEvent) => {

                // You can use of pb directly here

                // You also have access to things like models too.

                string j = pb.ImageLocation;

                MfNameTxt.Text = "Chris";

                MessageBox.Show("Clicked! " + j);

            };

            pb.SizeMode = PictureBoxSizeMode.Zoom;

            modelHsFlowLayout.Controls.Add(pb);

        }

    }


查看完整回答
反對 回復 2023-09-09
  • 1 回答
  • 0 關注
  • 104 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號