を使用F1することは、メニュー項目のヘルプを提供する一般的な方法ではありません。メニュー項目は通常ToolTipを使用するか、 StatusBarにヘルプ テキストを表示するか、通常はメイン ページのヘルプ コンテンツに包括的なヘルプが付属しています。
上記のソリューションのいずれかを使用することを好みますが、ここでは学習目的HelpRequestedで、フォームのイベントを使用して何ができるかを示します。
HelpRequestedフォームとコントロールのヘルプを処理するには、フォームとコントロールのイベントに依存できます。
Formここでは、問題を解決するためにイベントに頼ることができます。on フォームがあるため、すべてのコントロールのイベントを内部で処理HelpProviderすることを知っておく必要があります。コントロールが に設定されている場合は、 に設定され、イベントのバブルアップが防止されるため、 が の場合にヘルプ イベントを処理するためのカスタム コードを作成できません。そのため、コントロールに設定して、お助けキーホルダーとして使用する必要があります。HelpProviderHelpRequestedShowHelptrueHandledtrueShowHelptrueShowHelpfalseHelpProvider
フォームのイベントを使用して問題を解決するには、HelpRequested次の手順に従う必要があります。
- の場合は、プロパティをヘルプ キーホルダーとして
ToolStripMenuItems使用します。Tag
HelpProvider他のコントロールについて、を割り当てるために使用する場合は、に設定するHelpKeyことを忘れないでください。ShowHelpfalse
HelpRequestedフォームのイベントを処理します。
- イベント ハンドラーの本文で、フォームにアクティブなメニュー項目があるかどうかを確認し
Tag、アクティブな項目のプロパティを使用してヘルプを表示します。アクティブなメニューがない場合ActiveControlは、フォームのプロパティを使用してヘルプを表示します。
例
キーを使用してメニュー項目のヘルプを表示する方法の段階的な例を次に示しますF1。これを行うには、次の手順に従います。
- フォーム、メニュー、およびコントロールの作成 -フォーム上
FormにいくつかのコントロールとMenuStripいくつかのメニューおよびサブメニューを作成して配置します。
- HelpProviderの構成 -
HelpProviderフォームにコントロールを配置し、各コントロールに適切なキーをHelpKeywordコントロールのプロパティに割り当てます。またShowHelp、各コントロールを false に設定します。コードでヘルプを処理します。
- メニューのヘルプの構成-プロパティを
ToolStripMenuItem使用しTagてヘルプ キーワードを保存します。
メニューの子孫を見つけるためのヘルパー メソッドの作成- 次のコードを持つアプリケーションにクラスを追加します。ToolStripMenuItem次のコードでは、 a のすべてのサブを取得する拡張メソッドを導入しましたMenuStrip。
using System.Collections.Generic;
using System.Linq;
using System.Windows.Forms;
public static class ToolStripMenuItemExtensions
{
public static List<ToolStripMenuItem> Descendants(this MenuStrip menu)
{
var items = menu.Items.OfType<ToolStripMenuItem>().ToList();
return items.SelectMany(x => Descendants(x)).Concat(items).ToList();
}
public static List<ToolStripMenuItem> Descendants(this ToolStripMenuItem item)
{
var items = item.DropDownItems.OfType<ToolStripMenuItem>().ToList();
return items.SelectMany(x => Descendants(x)).Concat(items).ToList();
}
}
ヘルプを表示する Helprequested イベントの処理-HelpRequestedフォームのイベントを処理し、次のコードを使用して上記で説明したアルゴリズムを実装します。
private void Form1_HelpRequested(object sender, HelpEventArgs hlpevent)
{
string keyword = "";
var selectedMenuItem = this.menuStrip1.Descendants()
.Where(x => x.Selected).FirstOrDefault();
if (selectedMenuItem != null)
keyword = selectedMenuItem.Tag?.ToString();
else if (ActiveControl != null)
keyword = helpProvider1.GetHelpKeyword(ActiveControl);
if (!string.IsNullOrEmpty(keyword))
Help.ShowHelp(this, "Help.chm", HelpNavigator.Index, keyword);
}
ノート
- ソリューションをテストするために、インデックスなどを持つ chm ファイルは必要ありません。
Textフォームのプロパティでhelp キーワードを表示するだけです。これは、ソリューションが機能していることを意味し、その後、適切な chm ファイルを作成できます。
- 要件に基づいて、クラスの
ShowHelpメソッドの他のオーバーロードのいずれかを使用できます。Help
- コントロールには拡張プロパティがあり
HelpKeyword、HelpString使用しているものに注意して、HelpRequestedイベントで同じものを取得してください。
ShowHelpfalseに設定することを忘れないでください。この手順を忘れると、イベントは で内部的に処理されHelpproviderます。
Tagメニュー項目のプロパティにヘルプ キーワードを割り当てることを忘れないでください。将来的に使いやすくするために、ヘルプ キーワード プロパティをメニュー項目に追加するエクステンダー プロバイダーを作成するだけです。