/*
User Interfaces in C#: Windows Forms and Custom Controls
by Matthew MacDonald
Publisher: Apress
ISBN: 1590590457
*/
using System;
using System.Drawing;
using System.Collections;
using System.ComponentModel;
using System.Windows.Forms;
namespace ExtenderProviderHost
{
///
/// Summary description for HelpIconProviderHost.
///
public class HelpIconProviderHost : System.Windows.Forms.Form
{
internal System.Windows.Forms.TextBox TextBox2;
internal System.Windows.Forms.TextBox TextBox1;
private ExtenderProviderControls.HelpIconProvider helpIconProvider1;
private System.ComponentModel.IContainer components;
public HelpIconProviderHost()
{
//
// Required for Windows Form Designer support
//
InitializeComponent();
//
// TODO: Add any constructor code after InitializeComponent call
//
}
///
/// Clean up any resources being used.
///
protected override void Dispose( bool disposing )
{
if( disposing )
{
if(components != null)
{
components.Dispose();
}
}
base.Dispose( disposing );
}
#region Windows Form Designer generated code
///
/// Required method for Designer support - do not modify
/// the contents of this method with the code editor.
///
private void InitializeComponent()
{
this.components = new System.ComponentModel.Container();
this.TextBox2 = new System.Windows.Forms.TextBox();
this.TextBox1 = new System.Windows.Forms.TextBox();
this.helpIconProvider1 = new ExtenderProviderControls.HelpIconProvider(this.components);
this.SuspendLayout();
//
// TextBox2
//
this.TextBox2.Location = new System.Drawing.Point(24, 48);
this.TextBox2.Name = "TextBox2";
this.TextBox2.Size = new System.Drawing.Size(148, 20);
this.TextBox2.TabIndex = 3;
this.TextBox2.Text = "";
//
// TextBox1
//
this.TextBox1.Location = new System.Drawing.Point(24, 16);
this.TextBox1.Name = "TextBox1";
this.TextBox1.Size = new System.Drawing.Size(104, 20);
this.TextBox1.TabIndex = 2;
this.TextBox1.Text = "";
//
// helpIconProvider1
//
this.helpIconProvider1.HelpFile = null;
//
// HelpIconProviderHost
//
this.AutoScaleBaseSize = new System.Drawing.Size(5, 13);
this.ClientSize = new System.Drawing.Size(292, 150);
this.Controls.AddRange(new System.Windows.Forms.Control[] {
this.TextBox2,
this.TextBox1});
this.Name = "HelpIconProviderHost";
this.Text = "HelpIconProviderHost";
this.Load += new System.EventHandler(this.HelpIconProviderHost_Load);
this.ResumeLayout(false);
}
#endregion
private void HelpIconProviderHost_Load(object sender, System.EventArgs e)
{
helpIconProvider1.HelpFile = "myhelp.hlp";
helpIconProvider1.SetHelpID(TextBox1, "10001");
helpIconProvider1.SetHelpID(TextBox2, "10002");
helpIconProvider1.SetHelpID(TextBox1,"");
}
static void Main()
{
Application.Run(new HelpIconProviderHost());
}
}
}
//=============================================================
//=============================================================
using System;
using System.Windows.Forms;
using System.ComponentModel;
using System.Collections;
using System.Drawing;
namespace ExtenderProviderControls
{
[ProvideProperty("HelpID", typeof(string))]
public class HelpIconProvider : Component, IExtenderProvider
{
private System.ComponentModel.Container components = null;
public HelpIconProvider(System.ComponentModel.IContainer container)
{
///
/// Required for Windows.Forms Class Composition Designer support
///
container.Add(this);
InitializeComponent();
//
// TODO: Add any constructor code after InitializeComponent call
//
}
public HelpIconProvider()
{
///
/// Required for Windows.Forms Class Composition Designer support
///
InitializeComponent();
//
// TODO: Add any constructor code after InitializeComponent call
//
}
#region Component Designer generated code
///
/// Required method for Designer support - do not modify
/// the contents of this method with the code editor.
///
private void InitializeComponent()
{
System.Resources.ResourceManager resources = new System.Resources.ResourceManager(typeof(HelpIconProvider));
this.pictureBox1 = new System.Windows.Forms.PictureBox();
//
// pictureBox1
//
this.pictureBox1.Image = ((System.Drawing.Bitmap)(resources.GetObject("pictureBox1.Image")));
this.pictureBox1.Location = new System.Drawing.Point(17, 17);
this.pictureBox1.Name = "pictureBox1";
this.pictureBox1.TabIndex = 0;
this.pictureBox1.TabStop = false;
}
#endregion
private Hashtable contextID = new Hashtable();
private Hashtable pictures = new Hashtable();
private System.Windows.Forms.PictureBox pictureBox1;
private string helpFile;
public bool CanExtend(object extendee)
{
if (extendee.GetType() == typeof(Control))
{
// Ensure the control is attached to a form.
if (((Control)extendee).FindForm() == null)
{
return false;
}
else
{
return true;
}
}
else
{
return false;
}
}
public string HelpFile
{
get
{
return helpFile;
}
set
{
helpFile = value;
}
}
public void SetHelpID(object extendee, string value)
{
Control ctrl = (Control)extendee;
// Specifying an empty value removes the extension.
if (value == "")
{
contextID.Remove(extendee);
// Remove the picture.
PictureBox pic = (PictureBox)pictures[extendee];
pic.DoubleClick -= new EventHandler(PicDoubleClick);
pic.Parent.Controls.Remove(pic);
pictures.Remove(extendee);
}
else
{
contextID[extendee] = value;
// Create new icon.
PictureBox pic = new PictureBox();
pic.Image = pictureBox1.Image;
// Store a reference to the related control in the PictureBox.
pic.Tag = extendee;
pic.Size = new Size(16, 16);
pic.Location = new Point(ctrl.Right + 10, ctrl.Top);
ctrl.Parent.Controls.Add(pic);
// Register for DoubleClick event.
pic.DoubleClick += new EventHandler(PicDoubleClick);
// Store a reference to the help icon so we can remove it later.
pictures[extendee] = pic;
}
}
public string GetHelpID(object extendee)
{
if (contextID[extendee] != null)
{
return contextID[extendee].ToString();
}
else
{
return String.Empty;
}
}
public void PicDoubleClick(object sender, EventArgs e)
{
// Invoke help for control.
Control ctrlRelated = (Control)((Control)sender).Tag;
// Debug message.
MessageBox.Show("Help triggered.");
Help.ShowHelp(ctrlRelated, helpFile, HelpNavigator.Topic,
contextID[ctrlRelated].ToString());
}
}
}
HelpIconProviderHost.zip( 72 k)