如何让UserControl调度HelpRequest事件

Nie*_*sma 4 c# user-controls winforms

在"HelpRequest-mode"中单击时,如何让UserControl调度HelpRequest事件?

我试图用一些彩色背景设置最简单的UserControl.但无法让它发挥作用.

更新

namespace SeoTools.UI.Components
{
    public partial class HelpRequestTest : UserControl
    {
        public HelpRequestTest()
        {
            InitializeComponent();
        }

        protected override void OnHelpRequested(HelpEventArgs hevent)
        {
            base.OnHelpRequested(hevent); //can't get it here either
        }
    }
}

namespace SeoTools.UI.Components
{
    partial class HelpRequestTest
    {
        /// <summary> 
        /// Required designer variable.
        /// </summary>
        private System.ComponentModel.IContainer components = null;

        /// <summary> 
        /// Clean up any resources being used.
        /// </summary>
        /// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>
        protected override void Dispose(bool disposing)
        {
            if (disposing && (components != null))
            {
                components.Dispose();
            }
            base.Dispose(disposing);
        }

        #region Component Designer generated code

        /// <summary> 
        /// Required method for Designer support - do not modify 
        /// the contents of this method with the code editor.
        /// </summary>
        private void InitializeComponent()
        {
            this.SuspendLayout();
            // 
            // HelpRequestTest
            // 
            this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
            this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
            this.BackColor = System.Drawing.SystemColors.ActiveCaption;
            this.Name = "HelpRequestTest";
            this.Size = new System.Drawing.Size(114, 94);
            this.ResumeLayout(false);

        }

        #endregion
    }
}

...

private void WebHelpRequested(object sender, HelpEventArgs hlpevent)
{
    string tag = ((Control)sender).Tag.ToString();
    if (!string.IsNullOrEmpty(tag))
    {
        try
        {
            ProcessStartInfo sInfo = new ProcessStartInfo(tag);
            Process.Start(sInfo);
        }
        catch (Exception) { }
    }
    hlpevent.Handled = true;
}

...

// 
// helpRequestTest1
// 
this.helpRequestTest1.BackColor = System.Drawing.SystemColors.ActiveCaption;
this.helpRequestTest1.Location = new System.Drawing.Point(91, 3);
this.helpRequestTest1.Name = "helpRequestTest1";
this.helpRequestTest1.Size = new System.Drawing.Size(114, 94);
this.helpRequestTest1.TabIndex = 1;
this.helpRequestTest1.Tag = "http://offerta.se";
this.helpRequestTest1.HelpRequested += new System.Windows.Forms.HelpEventHandler(this.WebHelpRequested);
Run Code Online (Sandbox Code Playgroud)

Lar*_*ech 7

以它最简单的形式:

public partial class UserControl1 : UserControl {
  public UserControl1() {
    InitializeComponent();
  }
}

public partial class Form1 : Form {
  public Form1() {
    InitializeComponent();
    userControl11.Tag = "http://www.stackoverflow.com";
    userControl11.HelpRequested += userControl11_HelpRequested;
  }

  private void userControl11_HelpRequested(object sender, HelpEventArgs hlpevent) {
    string tag = ((Control)sender).Tag.ToString();
    if (!string.IsNullOrEmpty(tag)) {
      try {
        ProcessStartInfo sInfo = new ProcessStartInfo(tag);
        Process.Start(sInfo);
      }
      catch (Exception) { }
    }
    hlpevent.Handled = true;
  }
}
Run Code Online (Sandbox Code Playgroud)

这可以"按原样"在我的机器上运行.我让它"停止"工作的唯一方法是,如果我将一个TextBox控件添加到UserControl,并处理它的HelpRequest事件.

public partial class UserControl1 : UserControl {
  public UserControl1() {
    InitializeComponent();
  }

  private void textBox1_HelpRequested(object sender, HelpEventArgs hlpevent) {
    //This prevents the UserControl from firing it's help request:
  }
}
Run Code Online (Sandbox Code Playgroud)

所以我此时唯一的建议是查看UserControl中的子控件,看看它们是否干扰了UserControl调用事件的能力.

  • @NielsBosma您的代码有效.我更新了我的答案 - 我唯一的猜测是你的UserControl中的子控件正在干扰.这是我让它"不工作"的唯一方法. (2认同)