Как получить UserControl для отправки события HelpRequest - PullRequest
4 голосов
/ 20 ноября 2011

Как получить, чтобы UserControl отправлял событие HelpRequest при нажатии в «режиме 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);

1 Ответ

7 голосов
/ 20 ноября 2011

В простейшем виде:

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;
  }
}

Это работает на моей машине "как есть". Единственный способ заставить его «перестать» работать - это добавить элемент управления 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:
  }
}

Таким образом, мое единственное предложение на данный момент - посмотреть на дочерние элементы управления в вашем UserControl и посмотреть, не влияют ли они на способность UserControl вызывать событие.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...