2012-05-05 35 views
0

如何編寫tooltripmenu dropdownitem的代碼,其中的項在FormLoad上從數據庫表中獲取值生成?如何處理動態生成的工具條菜單項

如何在運行該程序之前爲這些不存在的項目編寫OnClick方法?

+1

這很不清楚。您當然可以從dbase表創建工具條項目,但這並沒有太大的成就。真正的肉是用戶點擊該項目時執行的*代碼*。代碼在哪裏? –

+0

你想要怎麼處理這個事件?是否足以讓項目的名稱被點擊?(在這種情況下,您可以在點擊的事件中傳遞/讀取名稱),還是想創建如果名稱與項目相同的類/函數? (在這種情況下,你需要一種叫做「後期綁定」的東西) – weberik

回答

0

控件就像任何其他對象一樣。我們習慣於使用wysiwyg設計器來指定用戶界面。

因此,像這樣:

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的數據行表。該名稱用作工具條項目標籤,並在單擊項目時顯示幫助文本。

你可以使用這個地方的名字與一個做這樣的事情開始創建代表行的菜單:

var view = GetMenuDataSet().Tables[0].DefaultView; 
view.RowFilter = "Name LIKE 'A%'"; 
menu.Items.Clear(); 
AddMenuItems(menu.Items, view); 

這假定GetMenuDataSet返回包含前面提到的兩列一個表中的數據集,並且您在設計時在窗體上放置了一些名爲「菜單」的根菜單(例如ContextMenuStrip)(或者確保在此代碼運行時創建它)。

要構建一個層次結構,您可以調用AddMenuItems並將其傳遞給某個項目的DropDownItems集合,而不是根菜單的「Items」 - 兩者都是ToolStripItemCollection類型。