を使用F1することは、メニュー項目のヘルプを提供する一般的な方法ではありません。メニュー項目は通常ToolTipを使用するか、 StatusBarにヘルプ テキストを表示するか、通常はメイン ページのヘルプ コンテンツに包括的なヘルプが付属しています。
上記のソリューションのいずれかを使用することを好みますが、ここでは学習目的HelpRequested
で、フォームのイベントを使用して何ができるかを示します。
HelpRequested
フォームとコントロールのヘルプを処理するには、フォームとコントロールのイベントに依存できます。
Form
ここでは、問題を解決するためにイベントに頼ることができます。on フォームがあるため、すべてのコントロールのイベントを内部で処理HelpProvider
することを知っておく必要があります。コントロールが に設定されている場合は、 に設定され、イベントのバブルアップが防止されるため、 が の場合にヘルプ イベントを処理するためのカスタム コードを作成できません。そのため、コントロールに設定して、お助けキーホルダーとして使用する必要があります。HelpProvider
HelpRequested
ShowHelp
true
Handled
true
ShowHelp
true
ShowHelp
false
HelpProvider
フォームのイベントを使用して問題を解決するには、HelpRequested
次の手順に従う必要があります。
- の場合は、プロパティをヘルプ キーホルダーとして
ToolStripMenuItems
使用します。Tag
HelpProvider
他のコントロールについて、を割り当てるために使用する場合は、に設定するHelpKey
ことを忘れないでください。ShowHelp
false
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
イベントで同じものを取得してください。
ShowHelp
falseに設定することを忘れないでください。この手順を忘れると、イベントは で内部的に処理されHelpprovider
ます。
Tag
メニュー項目のプロパティにヘルプ キーワードを割り当てることを忘れないでください。将来的に使いやすくするために、ヘルプ キーワード プロパティをメニュー項目に追加するエクステンダー プロバイダーを作成するだけです。