【发布时间】:2014-09-23 12:35:27
【问题描述】:
我正在 c# 中创建一个 WPF 应用程序,我想知道如何在网格中删除动态创建的按钮,假设我知道按钮名称。
解释:我有 16 个按钮,我想在单击一个按钮时同时删除两个按钮。我有他们的名字,但我不知道如何使用它。
这是我尝试过的,但这仅在您尝试删除单击的按钮时才有用。
public void delete(Button x)
{
myGrid.Children.Remove(x);
}
希望您能理解我的问题,因为我的英语不是我的母语。
我的代码:
for (int i=1; i<17; i++)
{
Button x = new Button();
x.MinHeight = 100;
x.MinWidth = 100;
var brush = new ImageBrush();
brush.ImageSource = new BitmapImage(new Uri(@"C:path\slikeSpomin\hrbtnaStran.png", UriKind.Relative));
x.Background = brush;
int ime = r.Next(0, max);
//x.Content = pari[ime];
x.Name = pari[ime];
pari.RemoveAt(ime);
max--;
x.VerticalAlignment = VerticalAlignment.Top;
x.HorizontalAlignment = HorizontalAlignment.Left;
x.Margin = new Thickness(a, b, 0, 0);
a = a + 130;
if (i % 4 == 0)
{
b = b + 120;
a = 10;
}
x.Click += new RoutedEventHandler((obj, ev) => btnClick(x));
gumbiDodani.Insert(0, x);
gridSlike.Children.Add(x);
} // Here i create my buttons
private void btnClick(Button x)
{
var brush = new ImageBrush();
string slika = x.Name;
sliki.Add(slika);
brush.ImageSource = new BitmapImage(new Uri(@"path\slikeSpomin\" + slika + ".png", UriKind.Relative));
x.Background = brush;
//zaženem metodo, ki preverja enake in se izvede samo v primeru, če so enake
enake(slika, x);
}
List<string> ksad = new List<string>();
public void enake(string ime, Button x)
{
ksad.Add(ime);
if (ksad.Count == 2)
{
string prva = ksad[0];
string druga = ksad[1];
if (prva.Equals(druga + "a") || druga.Equals(prva + "a"))
{
string imeGumba = x.Name;
MessageBox.Show(prva + " " + druga);
//this.gridSlike.Children.re
gridSlike.Children.Remove(x);
ksad.Clear();
}
else
{
MessageBox.Show("happy");
ksad.Clear();
}
}
}
【问题讨论】:
-
所以您的问题是如果您知道按钮的名称(字符串),如何获取对按钮的引用。
-
在这里发布代码。您的问题可能有更好的解决方案。
-
按钮是如何创建的?也发布此代码。
-
是的 kennyzx 但有两个引用,因为我需要删除两个按钮。当我单击一个按钮时我得到的第一个参考,然后我使用我在我的问题中发布的代码删除了这个按钮。但我需要再删除一个按钮,但我不知道如何获得它的参考。我只有按钮名称
-
你不能遍历 myGrid.children 并使用名称获取按钮吗?