关于HelpProvider的使用方式
如果用过HelpProvider的人,应该都知道,这个Control相对而言,使用还是很简单的,但是对于部署的方式方法,我存在疑问,不知能否有高手来解答...
背景: 一个项目,有很多Dialogue/Form,每个Form上也有多个Controls. 需求是当按下 F1 键时, 能够打开对应Control或者Form的帮助页面(html格式,注意,使用的不是chm文件). 由于使用html文件, HelpProvider控件自带的SetHelpKeyWord()方法不能像在使用chm文件的时候那样生效. 比如, 使用chm文件时, 我只需要将HelpProvider.HtmlNameSpace设置为chm文件的路径, 再将对应控件的帮助页面通过SetHelpKeyWord(Control ctl, string keyWord)的string参数传入, 就能够自动打开chm文件中keyWord对应的页面. 但是如果使用的是html文件, 就不会如此智能了,具体可以参考 http://larryzhu.bokee.com/6638197.html 这里的描述.
由于以上的限制, 我决定捕获 F1 的KeyDown事件, 然后将
继而,由于每个Form都需要实现这样一个事件...因此,我写了一个这个
上面的代码, 使用的是一个全局的单例. 我当然也可以用类似的代码实现多实例的
这样就引出了一个问题, 我是整个项目, 使用一个 HelpProvider实例呢, 还是每个Dialogue/Form用各自的HelpProvider对象? 注.两种方式都能够工作,已测,另外我已重载GetHelpKeyWord,能够获取当前焦点控件的KeyWord
由于在基类中无法得知该Form对应的html文件名,因此没有办法SetHelpKeyWord
将一个控件作为全局,实在不知道是否会有什么隐患,使用多个实例,又担心在内存使用和效率上会有损耗...
背景: 一个项目,有很多Dialogue/Form,每个Form上也有多个Controls. 需求是当按下 F1 键时, 能够打开对应Control或者Form的帮助页面(html格式,注意,使用的不是chm文件). 由于使用html文件, HelpProvider控件自带的SetHelpKeyWord()方法不能像在使用chm文件的时候那样生效. 比如, 使用chm文件时, 我只需要将HelpProvider.HtmlNameSpace设置为chm文件的路径, 再将对应控件的帮助页面通过SetHelpKeyWord(Control ctl, string keyWord)的string参数传入, 就能够自动打开chm文件中keyWord对应的页面. 但是如果使用的是html文件, 就不会如此智能了,具体可以参考 http://larryzhu.bokee.com/6638197.html 这里的描述.
由于以上的限制, 我决定捕获 F1 的KeyDown事件, 然后将
HelpProvider.HtmlNameSpace = HelpProvider.GetHelpKeyWord(this);继而,由于每个Form都需要实现这样一个事件...因此,我写了一个这个
public class HelpForm : Form
{
public HelpForm()
{
this.KeyPreview = true;
this.KeyDown += new System.Windows.Forms.KeyEventHandler(this.Form_OnKeyDown);
}
private void Form_OnKeyDown(object sender, KeyEventArgs e)
{
if (e.KeyCode == System.Windows.Forms.Keys.F1)
{
HelpProviderSingleTon.MyHelpProvider.HelpNamespace = HelpProviderSingleTon.MyHelpProvider.GetHelpKeyWord(this);
}
}
}
上面的代码, 使用的是一个全局的单例. 我当然也可以用类似的代码实现多实例的
public class HelpForm : Form
{
private HelpProvider helpProvider;
public HelpForm()
{
this.helpProvider = new HelpProvider();
this.KeyPreview = true;
this.KeyDown += new System.Windows.Forms.KeyEventHandler(this.Form_OnKeyDown);
}
private void Form_OnKeyDown(object sender, KeyEventArgs e)
{
if (e.KeyCode == System.Windows.Forms.Keys.F1)
{
helpProvider.HelpNamespace = helpProvider.GetHelpKeyWord(this);
}
}
}
这样就引出了一个问题, 我是整个项目, 使用一个 HelpProvider实例呢, 还是每个Dialogue/Form用各自的HelpProvider对象? 注.两种方式都能够工作,已测,另外我已重载GetHelpKeyWord,能够获取当前焦点控件的KeyWord
由于在基类中无法得知该Form对应的html文件名,因此没有办法SetHelpKeyWord
将一个控件作为全局,实在不知道是否会有什么隐患,使用多个实例,又担心在内存使用和效率上会有损耗...
...全文
相关推荐
C#使用HelpProvider组件调用帮助文件
摘要:C#源码,控件类库,HelpProvider C#使用HelpProvider组件调用帮助文件,测试发现没有调用出来,好像程序还是有些问题,有兴趣的下载修正 。
调用帮助文件
本程序实现使用HelpProvider组件调用帮助文档的功能,按下F1键调用系统帮助文件。
Windows Mobile Pocket PC中的帮助文件集成
以编程方式帮助文件与Windows Mobile应用程序集成。
vb帮助代码实例
基于VB2010编写的windows 帮助控件类似实例
vb.net对话框用法
vb.net对话框的使用方法:使用消息对话框按钮启动程序、启动帮助文件、对话框中设置图片等等。源码!


