【问题标题】:user control and raising events from controls placed in user control用户控件并从放置在用户控件中的控件引发事件
【发布时间】:2018-09-18 20:21:19
【问题描述】:

所以我想知道下面的代码有什么问题,尤其是从理论的角度来看。

我有一个用户控件,其中添加了一个文本框。 当我单击文本框时,我希望在用户控件中引发鼠标单击事件。 在我看来,解决方案应该是: 为文本框中的鼠标单击事件创建事件处理程序。 在此事件处理程序中,引发用户控件的鼠标单击事件。

这就是我所拥有的:

    private void txtLog_MouseClick(object sender, MouseEventArgs e)
    {
        this.OnMouseClick(e);
    }

我试过了,还是不行,这是为什么呢?

附:我真的很想知道为什么这是错误的!一个正确的解决方案很棒,但我真的很想了解我在哪里出错了。谢谢:-)

【问题讨论】:

    标签: c# events


    【解决方案1】:

    好吧,您可以在设计模式下单击文本框,然后在事件选项卡的属性窗口中添加单击事件。或者如果你想在运行时这样做,你可以这样做:

     textbox.Click += Txt_Click;
    
        private static void Txt_Click(object sender, EventArgs e)
        {
           // do your thing
        }
    

    甚至更短:

    textbox.Click += (s,e) =>
    {
        //do your thing
    };
    

    【讨论】:

      【解决方案2】:

      你应该做这三个步骤

      • 为文本框声明一个 MouseClick 委托方法
      • 将方法分配给文本框
      • 将此委托添加到 this(表单)OnMouseClick 事件 [在用户控件构造函数上]

      第一步:

          private void textBox1_MouseClick(object sender, MouseEventArgs e)
          {
      
          }
      

      第二步:

      this.textBox1.MouseClick += new System.Windows.Forms.MouseEventHandler(this.textBox1_MouseClick);
      

      第三步:

          public myUserControl()
          {
              InitializeComponent();
      
              this.MouseClick += new MouseEventHandler(textBox1_MouseClick);
          }
      

      【讨论】:

        猜你喜欢
        • 2012-04-23
        • 1970-01-01
        • 1970-01-01
        • 2012-11-26
        • 2010-10-30
        • 2020-06-28
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多