データベーステーブルから値を取るFormLoadでアイテムが生成されるツールストリップメニューdropdownitemのコードを書くにはどうすればよいですか?動的に生成されたツールストリップメニュー項目を処理する方法
プログラムを実行する前に存在しないこのアイテムに対して、どのようにしてOnClickメソッドを記述できますか?
データベーステーブルから値を取るFormLoadでアイテムが生成されるツールストリップメニューdropdownitemのコードを書くにはどうすればよいですか?動的に生成されたツールストリップメニュー項目を処理する方法
プログラムを実行する前に存在しないこのアイテムに対して、どのようにしてOnClickメソッドを記述できますか?
コントロールは他のオブジェクトとまったく同じです。私たちは、単にユーザーインターフェースを指定するためのデザイナを使用するのに慣れています。
したがって、このような何か:
void AddMenuItems(ToolStripItemCollection itemCollection, DataView view)
{
foreach (DataRowView rowView in view)
itemCollection.Add(MakeMenuItem(rowView.Row));
}
ToolStripItem MakeMenuItem(DataRow row)
{
var item = new ToolStripMenuItem((string)row["Name"]);
item.Tag = row;
item.Click += new EventHandler(MenuItem_Click);
return item;
}
void MenuItem_Click(object sender, EventArgs e)
{
var row = ((ToolStripItem)sender).Tag as DataRow;
MessageBox.Show((string)row["HelpText"]);
}
あなたが(例えば、いくつかの種類のエンティティ)項目データのためのDataRow以外のものを使用したい、そしておそらく完全に異なるロジック項目を作成するには、これが示すことパターン:他のオブジェクトを作成するのと同じようにアイテムを作成し、フォームにすでにルートされているメニューに追加します(ルートを動的に作成することもできますが、データを持つアイテムをクリックし、クリックハンドラのタグからデータを取得します。
これは、NameとHelpTextの2つの文字列型列を持つdatarowsのテーブルをフェッチしたことを前提としています。名前はツールストリップのアイテムラベルとして使用され、アイテムをクリックするとヘルプテキストが表示されます。あなたは名前がこのような何かやっAで始まる行を表すメニュー作成するためにこれを使用することができ
:
var view = GetMenuDataSet().Tables[0].DefaultView;
view.RowFilter = "Name LIKE 'A%'";
menu.Items.Clear();
AddMenuItems(menu.Items, view);
をこれはGetMenuDataSetは、前述の二つの列を持つテーブルを含むDataSetを返すことを前提とし、デザイン時にフォーム上に "menu"という名前のルートメニュー(例えばContextMenuStrip)を配置したことを確認してください(または、このコードが実行された時点で作成されていることを確認してください)。
階層構造を構築するには、AddMenuItemsを呼び出して、ルートメニューの「Items」の代わりにアイテムのDropDownItemsコレクションを渡すことができます。どちらもToolStripItemCollection型です。
これはかなり不明です。あなたは確かにdbaseテーブルからツールストリップ項目を作成することはできますが、これはあまり効果がありません。実際の肉は、ユーザが項目をクリックしたときに実行される*コード*です。そのコードはどこですか? –
あなたはイベントで何をしたいですか?アイテムの名前をクリックするだけで十分ですか(この場合、クリックされたイベントで名前を渡したり読むことができます)か、名前がアイテムと同じであれば呼び出されるクラス/関数を作成しますか? (この場合、「遅延結合」と呼ばれるものが必要です) – weberik