【问题标题】:Adding a mouse click eventhandler to a PictureBox将鼠标单击事件处理程序添加到 PictureBox
【发布时间】:2012-11-19 14:06:00
【问题描述】:

我有一个图片框控件,单击它后,另一个图片框会出现在特定位置。 I.o.w 它不是从工具箱中添加的。

PictureBox picOneFaceUpA = new PictureBox();
        picOneFaceUpA.Location = new Point(42, 202);
        picOneFaceUpA.Width = 90;
        picOneFaceUpA.Height = 120;
        picOneFaceUpA.Image = Image.FromFile("../../Resources/" + picFaceUpToBeMoved[0] + ".png");
        Controls.Add(picOneFaceUpA);
        picOneFaceUpA.BringToFront();

如何向该控件添加 MouseClick 事件处理程序?

谢谢

【问题讨论】:

    标签: c# winforms


    【解决方案1】:

    只需使用+= 运算符添加事件处理程序:

    picOneFaceUpA.MouseClick += new MouseEventHandler(your_event_handler);
    

    或者:

    picOneFaceUpA.MouseClick += new MouseEventHandler((o, a) => code here);
    

    【讨论】:

    • 我发现我的图片框没有MouseClick?
    • @AllanRuin - 和所有(或大多数)WinForms 控件一样:msdn.microsoft.com/en-us/library/…
    • Orz,我找到了。以前我在类的非构造函数部分键入图片框实例,因此 MouseClick 不可用。
    • 如果我只使用图像对象而不是图片框怎么办?
    • @Ashton 图像对象不是 UI 控件;它只是图像数据。您仍然需要将其置于某种控件中才能在 UI 上显示它。
    【解决方案2】:

    如果你输入picOneFaceUpA.Click +=然后点击tab,它会为你自动完成并实现事件处理程序:

        private void button2_Click(object sender, EventArgs e)
        {
            PictureBox picOneFaceUpA= new PictureBox();
            picOneFaceUpA.Click += new EventHandler(picOneFaceUpA_Click);
        }
    
        void picOneFaceUpA_Click(object sender, EventArgs e)
        {
            throw new NotImplementedException();
        }
    

    【讨论】:

      【解决方案3】:

      在 WinForms 中订阅事件的最佳方式 - 在设计器中选择您的控件,转到“属性”窗口并选择“事件”选项卡。然后选择您想要的任何事件(单击、鼠标单击等)并双击事件名称右侧的空格。将生成事件处理程序并订阅事件。


      如果您想手动订阅事件,则将事件处理程序添加到事件中

      picOneFaceUpA.MouseClick += PicOneFaceUpA_MouseClick;
      

      在编写+= 后点击Tab 将生成处理程序。或者你可以手动写:

      void PicOneFaceUpA_MouseClick(object sender, MouseEventArgs e)
      {
         // handle click event
         if (e.Button == MouseButtons.Left)
             MessageBox.Show("Left button clicked");
      }
      

      顺便说一句,如果您不需要有关单击事件的其他信息(例如单击了哪个按钮),请改用 Click 事件。它默认处理左键点击:

      picOneFaceUpA.Click += PicOneFaceUpA_Click;
      

      和处理程序:

      void PicOneFaceUpA_Click(object sender, EventArgs e)
      {
         // show another picture box
      }
      

      【讨论】:

      • @carny666 改为 MouseClick,但实际上如果 OP 只对 picturebox control and upon clicking it .. 感兴趣,那么点击就足够了
      • 次要评论...您必须点击两次选项卡才能生成该功能。第一个选项卡仅生成文本“PicOneFaceUpA_Click”。
      【解决方案4】:

      看来你知道如何添加动态控件那么你应该这样做

      this.picOneFaceUpA.MouseClick += new MouseEventHandler(yourMethodName); //hook
      

      并删除一个事件

      this.picOneFaceUpA.MouseClick -= yourMethodName;     //unhook
      

      该方法应该像这样声明:

      private void yourMethodName(object sender, MouseEventArgs e)
      {
          //your code here
      }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-06-23
        • 2012-09-26
        相关资源
        最近更新 更多