【问题标题】:Handling UserControl events dynamically动态处理 UserControl 事件
【发布时间】:2013-09-10 06:56:21
【问题描述】:

最初我有一个图片框,用户可以在表单上从一个地方移动到另一个地方。 我已经处理了图片框的事件,它正在完美地移动。

但是现在用户想要在图片下方显示一个文本。所以我想动态创建一个自定义控件,并在用户控件中添加那个图片框和一个标签控件。

我还将控件的停靠属性设置为 TOP 和 Bottom。现在我的用户控件完全被子控件覆盖了。

之后我想为用户控件处理鼠标事件。但不幸的是,这对我不起作用。

据我了解,现在我无法访问用户控件,而是可以访问用户控件中的子控件,因此用户控件的鼠标事件不起作用。

如有错误请指正,并提供任何解决方案。

【问题讨论】:

    标签: c# .net user-controls mouseevent


    【解决方案1】:

    好吧,像MouseDownMouseUp 这样的鼠标事件只有在鼠标在特定控件上执行某些操作时才会发生。我能给你的最好的提议是捕捉控件中的每个鼠标事件并在userControl 上调用一个方法

      public UserControl1()
      {
         InitializeComponent();
         this.MouseDown += new MouseEventHandler(this.UserControl1_MouseDown);
         this.comboBox1.MouseDown += new MouseEventHandler(this.comboBox1_MouseDown);
      }
    
      private void UserControl1_MouseClick(object sender, MouseEventArgs e)
      {
          UCMouseDown();
      }
    
      private void UserControl1_MouseDown(object sender, MouseEventArgs e)
      {
          UCMouseDown();
      }
    
      private void comboBox1_MouseDown(object sender, MouseEventArgs e)
      {
          UCMouseDown();
      }
    
      private void UCMouseDown()
      {
          // Your code
      }
    

    【讨论】:

    • 我必须重新计算坐标并相应地定位用户控件。但是,如果我处理子控件的事件,我将获得相对于用户控件而不是相对于窗体的坐标。在这种情况下,坐标将无法正确计算。
    • 嘿,成功了。我应该自己尝试一下。但是对于这个解决方案,我必须处理我的两个子控件的事件。如果我有超过 10 个控件怎么办?期待为此采取全球方法。
    • @Lokesh 有一个全局方法,但你不会喜欢它:stackoverflow.com/questions/547172/…
    猜你喜欢
    • 1970-01-01
    • 2011-05-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多