【问题标题】:how to use CheckBoxes to select images in visual c#如何使用 CheckBoxes 在 Visual C# 中选择图像
【发布时间】:2015-10-12 06:57:26
【问题描述】:

根据下面的代码,我可以从我的 SQL 服务器表中收集我存储的图像并在每个图像下放置一个复选框。我的目标是使用这些复选框来选择它们上方的图像并使用另一个用户控件执行操作(即用于从数据库中删除它们或将它们复制到另一个目录的按钮)。我尝试创建一个事件处理程序,但无法以我的 c# 知识水平实现。我恳请您提供解决方案和指导,以便更好地理解。

  private void button4_Click(object sender, EventArgs e)
    {
        PictureBox[] pba = new PictureBox[100];
        SqlConnection con4 = new SqlConnection(DBHandler.GetConnectionString());
        SqlCommand cmd4 = new SqlCommand("ReadAllImage", con4);
        cmd4.CommandType = CommandType.StoredProcedure;
        SqlDataAdapter da2 = new SqlDataAdapter(cmd4);
        DataSet dt2 = new DataSet("ImageData");
        da2.SelectCommand = cmd4;
        da2.Fill(dt2);
        int a = comboBox1.Items.Count;
        byte[] xdata = new byte[0];
        CheckBox[] chckbx = new CheckBox[400];
        for (var i = 0; i < a; i++)
        {
            DataRow myRow2 = null;
            if (myRow2 == null)
            {
                myRow2 = dt2.Tables[0].Rows[i];
                xdata = (byte[])myRow2["ImageData"];

                MemoryStream stream2 = new MemoryStream(xdata);

                PictureBox npb = new PictureBox();
                npb.Size = new Size(60, 60);
                int b = i / 5;
                npb.Location = new Point(420 + (i % 5) * 70, 20 + (90 * b));
                npb.Image = Image.FromStream(stream2);
                npb.SizeMode = PictureBoxSizeMode.StretchImage;
                pba[i] = npb;

                this.Controls.Add(pba[i]);

                CheckBox chckbxx = new CheckBox();
                chckbxx.Location = new Point(420 + (i % 5) * 70, 80 + (90 * b));
                chckbxx.AutoSize = true;
                chckbx[i] = chckbxx;
                this.Controls.Add(chckbx[i]);

            }

运行代码后我的示例输出。我想使用这张图片中的检查框。我实际上设法像这样创建它们,但无法使它们与它们上方的图像相关。

【问题讨论】:

  • 一种简单但不优雅的方法是不将复选框和图片框添加到 this.Controls,但也添加到自定义的 List&lt;CheckBox&gt;List&lt;PictureBox&gt;,您在后台定义,然后,当勾选复选框时,从List&lt;CheckBox&gt; 获取IndexOf(yourCheckbox) 并使用该索引访问List&lt;PictureBox&gt;。另一种可能性是使用 CheckBox.Tag 属性并将 PictureBox 分配给它,这样您就可以获得关系......无论您在代码中的什么地方需要它。
  • Checkbox 没有 Tag 属性 是的,就像每个控件一样。
  • 查看您的图像大小,我会使用 Checked ListView 和 ImageList。
  • @LInsoDeTeh 我现在正在处理您的建议。如果我实现了,我会发布解决方案(我希望)。

标签: c# sql-server winforms checkbox


【解决方案1】:

制作一个包含图像和复选框的自定义控件。 那么两者总是连接的: 逻辑和程序化。

自定义控件示例: https://msdn.microsoft.com/en-us/library/ff723977%28v=expression.40%29.aspx

http://www.codeproject.com/Articles/2016/Writing-your-Custom-Control-step-by-step

【讨论】:

  • 我不确定我是否能够在知识有限的情况下处理自定义控件:(
  • 然后试试(就像提到的 LInsoDeTeh):chckbxx.Tag = npb;图片框 p = (图片框)chckbxx.Tag;
  • 真正的问题是动态创建它们,因此我无法在创建时指定复选框。我尝试添加一个按钮来获取复选框 id 以将它们与图片框 id 匹配,但由于我用于生成图片框和复选框的封闭循环。无论如何,在尝试完成这个问题之前,我似乎必须研究更多地了解机制。感谢您的关注
  • 你知道我是否能够使用 WPF 和使用数据绑定工具吗?如果可行,我该如何实现?
猜你喜欢
  • 2013-06-24
  • 1970-01-01
  • 1970-01-01
  • 2019-03-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-02-18
相关资源
最近更新 更多