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)
以它最简单的形式:
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调用事件的能力.