데이터베이스 테이블에서 값을 가져 오는 FormLoad에서 항목이 생성되는 toolstripmenu dropdownitem에 대한 코드를 작성하려면 어떻게해야합니까?동적으로 생성 된 도구 스트립 메뉴 항목을 처리하는 방법
프로그램을 실행하기 전에 존재하지 않는이 항목에 대해 어떻게 OnClick 메서드를 작성할 수 있습니까?
데이터베이스 테이블에서 값을 가져 오는 FormLoad에서 항목이 생성되는 toolstripmenu dropdownitem에 대한 코드를 작성하려면 어떻게해야합니까?동적으로 생성 된 도구 스트립 메뉴 항목을 처리하는 방법
프로그램을 실행하기 전에 존재하지 않는이 항목에 대해 어떻게 OnClick 메서드를 작성할 수 있습니까?
컨트롤은 다른 모든 개체와 같습니다. 우리는 단순히 사용자 인터페이스를 지정하는 데 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라는 두 문자열 유형 열이있는 datarows 테이블을 가져온 것으로 가정합니다. 이 이름은 도구 막대 항목 레이블로 사용되며 항목을 클릭하면 도움말 텍스트가 표시됩니다.
당신은 이름이 같은하고 뭔가 시작되는 행을 나타내는 메뉴를 만들려면이를 사용할 수 있습니다
var view = GetMenuDataSet().Tables[0].DefaultView;
view.RowFilter = "Name LIKE 'A%'";
menu.Items.Clear();
AddMenuItems(menu.Items, view);
이 GetMenuDataSet 이전에 언급 한 두 개의 열이있는 테이블을 포함하는 데이터 집합을 반환 가정, 디자인 타임에 "menu"라는 이름의 루트 메뉴 (예 : ContextMenuStrip)를 폼에 배치했는지 (그렇지 않으면이 코드가 실행될 때 만들어 졌는지 확인)
계층 구조를 만들려면 AddMenuItems를 호출하고 루트 메뉴의 "Items"대신 일부 항목의 DropDownItems 컬렉션을 전달하면됩니다. 둘 다 ToolStripItemCollection 유형입니다.
꽤 명확하지 않습니다. 확실히 dbase 테이블에서 toolstrip 항목을 만들 수는 있지만 많이 달성하지는 못합니다. 실제 고기는 사용자가 항목을 클릭 할 때 실행되는 * 코드 *입니다. 그 코드는 어디에 있습니까? –
정확히 어떤 일을하고 싶습니까? 클릭 한 항목의 이름을 가지고 있으면 충분합니까? (이 경우 클릭 한 이벤트에서 이름을 전달하거나 읽을 수 있음) 또는 항목과 이름이 같은 경우 호출되는 클래스/함수를 만들겠습니까? (이 경우에는 '후기 바인딩'이 필요합니다.) – weberik