【问题标题】:Delete Image from PictureBox in C#从 C# 中的 PictureBox 中删除图像
【发布时间】:2010-12-29 11:16:39
【问题描述】:

当用户按下“del”键时如何从图片框中删除图像...我没有找到任何用于 PB 的按键或按键事件。

    private void topRight_pbx_MouseClick(object sender, MouseEventArgs e)
          {
           imgSelected=true;

           //need to accept "delete"key from keyboard?

           topRight_pbx.Image = null;
            topRFile = "";

           }

【问题讨论】:

    标签: c# .net winforms picturebox


    【解决方案1】:

    将您的 imgSelected 更改为:

    private PictureBox picSelected = null;
    

    在您的图片框上单击将此变量设置为发件人:

    picSelected = (PictureBox)sender;
    

    然后在表单的 keydown 或具有焦点的控件上运行图像删除代码 (表格示例):

    private void Form1_KeyDown(object sender, KeyEventArgs e)
    {
       if (e.KeyCode == Keys.Delete)
          picSelected.Image = null;
    }
    

    【讨论】:

    • 当然,如果你有多个PictureBox控件,你仍然需要一些外部的方式来指示选择了哪个,以免用户无意中删除错误图片。
    • 我忘记了细节,但我在使用这种方法时遇到了一些问题。我认为是表单在某些情况下没有得到关键事件。当然,您只想在选择图像时删除图像,而不是用户只想删除字符的其他文本控件。
    • @Jorge:我的表单中有 4 个图片框,这是处理所选图像的删除还是我需要明确处理?
    • @Sisya:如果您将相同的点击代码放入所有 4 个中(通过相同的点击处理程序或复制粘贴),它将适用于所有这些,只删除最后一个被用户点击。 @CodeInChaos:添加代码以使用 keydown 事件聚焦隐藏的文本框可以解决该问题;)
    • 我看不出有人希望它如何与多个图片框一起正常工作,或者为什么它是公认的答案。问题中为MouseClick 事件提供的代码已经删除了图像。显然,关键是用键盘来做。但是,当用户按下键盘上的 Del 键时,您将如何检测 which PictureBox 正在尝试删除图像?
    【解决方案2】:

    那是因为PictureBox控件永远无法获得焦点,非焦点控件不接收键盘输入事件。

    正如documentation 所示,KeyDown 事件(以及与键盘输入相关的其他事件)被标记为[BrowsableAttribute(false)],因为它们无法按预期工作。它们不打算由您的代码订阅。

    它类似于Label 控件——您可以查看它,但它不可选择且无法获取焦点。

    您需要找到另一种方式让用户表明他想要删除当前显示在PictureBox 控件中的图像。

    【讨论】:

      【解决方案3】:

      我在我的一个项目中遇到了类似的问题。我通过添加一个屏幕外文本框来解决它。当某些控件被点击时,我将焦点放在文本框上,并使用文本框来处理键盘输入。

      PicureBox SelectedImage=null;
      
      void Image_Click(object sender,...)
      {
        SelectedImage=(PictureBox)sender;
        FocusProxy.Focus();
      }
      
      void FocusProxy_KeyDown(...)
      {
        if(e.KeyData==...)
        {
             SelectedImage.Image=null;
             e.Handled=true;
        }
      }
      

      【讨论】:

        【解决方案4】:

        另一种方法可能是: 如果您在图片框上绘图并且想要清除它:

        Graphics g = Graphics.FromImage(this.pictureBox1.Image);
        g.Clear(this.pictureBox1.BackColor);
        

        之后,您可以在控件上再次绘制。

        我希望这对某人有所帮助

        【讨论】:

          猜你喜欢
          • 2015-04-23
          • 1970-01-01
          • 2014-08-06
          • 2011-11-15
          • 1970-01-01
          • 2019-05-31
          • 1970-01-01
          • 2016-11-10
          • 1970-01-01
          相关资源
          最近更新 更多