2012-05-14 75 views
0

删除在我的申请,我在运行时生成多个按钮,并把它添加到网格,下面删除按钮,从电网

for (int i = 0; i < ListOfMainCategories.Count; i++) 
      { 
       clsMainCategory tempCat = (clsMainCategory)ListOfMainCategories[i]; 
       ButtonMainMenuCat btn = CreateMainButton(tempCat.CatTitle, i); 
       btn.Margin = new Thickness(0, 1, 0, 1); 
       btn.TabIndex = TabIndexNo; 
       if (i == 0) 
       { 
        buttonHomeMenu = btn; 
       } 
       btn.AddHandler(ButtonMainMenuSubSubCat.GotKeyboardFocusEvent, new RoutedEventHandler(ButtonMainMenuGotFocus), handledEventsToo: false); 
       // stackTableViewMainMenu.Children.Add(btn); 
       Grid.SetRow(btn, 1); 
       Grid.SetColumn(btn, i + 1); 
       gridHeader.Children.Add(btn); 

      } 

后在特定的事件我删除了所有这些按钮从网格。

gridHeader.Children.RemoveRange(0, gridHeader.Children.Count); 

在这里,我想我还需要删除或销毁或从内存中卸载这些按钮。那么,我该如何做这个任务?请建议

+0

这就是一些可怕的代码,你应该看看[数据绑定(http://msdn.microsoft.com/en-us /library/ms752347.aspx)和[数据模板](http://msdn.microsoft.com/en-us/library/ms742521.aspx),则不需要强制创建和删除按钮。 –

+0

你是对的。但是当我开始这个项目时,我对WPF并不熟悉,并没有找到正确的方法。所以我使用经典风格(就像我们在VS2005中做的那样)。然而,不时地,我改变了效率代码 – Rupesh

回答

1

由于没有任何可处置的东西,所以Yuo不能处理古典意义上的按钮。您正在处理托管代码。只要没有引用,内存分配将被垃圾收集器清除。在上面的代码中,通过路由事件处理程序保留对按钮的引用,因此请在从网格中删除它之前调用btn.RemoveHandler

你可以看看MSDN指导WeakEvent模式在这里:http://msdn.microsoft.com/en-us/library/aa970850

+0

tb1.Click - = new RoutedEventHandler(ClickRightSubSubCategoriesItem); tb1.RemoveHandler(ButtonMainMenuSubSubCat.KeyDownEvent,new KeyEventHandler(ButtonMainMenuSubCatCatNavigationKeys_KeyDown)); tb1.RemoveHandler(ButtonMainMenuSubSubCat.GotKeyboardFocusEvent,new RoutedEventHandler(ButtonMainMenuSubSubCatGotFocus)); - 是否是删除处理程序的正确方法?这里tb1是按钮 – Rupesh

+0

你的原始代码片段并不显示你订阅Click或KeyDown事件,但是如果你以类似的方式订阅它们,那么是的,你的代码将正确地删除处理程序。 –

+0

谢谢安德鲁。我应用给另一个网格和另一种类型的按钮的片段。 – Rupesh